Migs (MasterCard Virtual Payment Client) интеграция php - PullRequest
7 голосов
/ 07 ноября 2011

Может ли кто-нибудь помочь мне с интеграцией migs (виртуального платежного клиента MasterCard) на сайте php!

Я прочитал справочное руководство, нобесполезен!

Ответы [ 4 ]

6 голосов
/ 28 июня 2012

// Это значение, отправленное в Шлюз оплаты MIGS

        $SECURE_SECRET =  $signature; //value from migs payment gateway
        $accessCode    =  $accesscode;//value from migs payment gateway
        $merchantId    =  $merchantid;//value from migs payment gateway
        $paymentdata = array(
                 "vpc_AccessCode" => $accessCode,
                 "vpc_Amount" => ($amount*100),//our product price , must multipy by 100
                 "vpc_Command" => 'pay',
                 "vpc_Locale" => 'en',// order id
                 "vpc_MerchTxnRef" => random_unique_value(like session),
                 "vpc_Merchant" => $merchantId,
                 "vpc_OrderInfo" => "Some Comment",
                 "vpc_ReturnURL" => "htps://yoursite.com/returnpoint",//here code for db updation, return variable here
                 "vpc_Version" => '1'
                           );

        $actionurl = 'https://migs.mastercard.com.au/vpcpay' . "?";
        $HashData = $SECURE_SECRET;
        $str = 0;
        foreach ($paymentdata as $key => $value) {
            // create the md5 input and URL
            if (strlen($value) > 0) {
                // this ensures the first paramter of the URL is preceded by the '?' char
                if ($appendAmp == 0) {
                    $actionurl .= urlencode($key) . '=' . urlencode($value);
                    $str = 1;
                } else {
                    $actionurl .= '&' . urlencode($key) . "=" . urlencode($value);
                }
                $HashData .= $value;
            }
        }

        if (strlen($SECURE_SECRET) > 0){$actionurl .= "&vpc_SecureHash=" . strtoupper(md5($HashData));}
        header("Location: " . $actionurl);
    }

///////////////////// ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ ////////////////////////// /////////

the return url will be like

https://yoursite.com/returnpoint?vpc_TransactionNo="migs_transaction_number"&vpc_MerchTxnRef="random_unique_value(we post to migs)"&vpc_TxnResponseCode=value&vpc_Message="value"
 if vpc_TxnResponseCode = 0 -- success ,vpc_Message = approved -- paymet is success , All other unsuccessfull payment
3 голосов
/ 12 января 2014

Вы можете использовать Omnipay PHP Library , которая поддерживает MIGS-шлюз .

Пример обработки платежей за пределами площадки (3-Party)выглядит так:

use Omnipay\Omnipay;

$gateway = Omnipay::create('Migs_ThreeParty');
$gateway->setMerchantId('foo');
$gateway->setMerchantAccessCode('foo');
$gateway->setSecureHash('foo');

$response = $gateway->purchase(array('amount' => '10.00', 'currency' => 'AUD'))->send();

if ($response->isRedirect()) {
    // redirect to offsite payment gateway
    $response->redirect();
} else {
    // payment failed: display message to customer
    echo $response->getMessage();
}
2 голосов
/ 14 февраля 2012

реализует платежный шлюз migs, в котором нам нужно отправить некоторые детали в https://migs.mastercard.com.au/vpcpay? этот URL с указанными ниже данными

    /*"vpc_AccessCode" the accesscode given by Migs
"vpc_Amount" Amount that is multiplied by 100
"vpc_Command" ='pay',default pay
"vpc_Locale" = 'en' // language
"vpc_MerchTxnRef"  orderId // Should be Unique for each payment
"vpc_Merchant"  // merchant ID
"vpc_OrderInfo"  // Desc or and details of Product
"vpc_ReturnURL" // SuccessUrl
"vpc_Version" = '1'
&vpc_SecureHash = // create MD5 of all the values that are passed  */

Создание URL

    $SECURE_SECRET = "YEOCOEN29B0785F1FF1E3C0FA8A3FUJK";  
        $accessCode = '546484645';
        $merchantId = '5465465288';
        if($migs_testmode ==1) {
            $SECURE_SECRET = "YEOCOEN29B0785F1FF1E3C0FA8A3FUJK";
            $accessCode = '98989645';
            $merchantId = '56456456489';
        }
     $amount ='10.00';
    $unique_id = rand(999999,8988888888);//this is a sample random no
        $postdata = array(
                "vpc_AccessCode" => $accessCode,
                "vpc_Amount" => ($amount*100),
                "vpc_Command" => 'pay',
                "vpc_Locale" => 'en',
                "vpc_MerchTxnRef" => $unique_id,
                "vpc_Merchant" => $merchantId,
                "vpc_OrderInfo" => 'this is a product',
                "vpc_ReturnURL" => "https://mywebsite.com/success.php",
                "vpc_Version" => '1');


        $vpcURL = 'https://migs.mastercard.com.au/vpcpay?';
        $md5Hash = $SECURE_SECRET;
        $appendAmp = 0;


        foreach ($wpay_postdata as $key => $value) {

            if (strlen($value) > 0) {

                if ($appendAmp == 0) {
                    $vpcURL .= urlencode($key) . '=' . urlencode($value);
                    $appendAmp = 1;
                } else {
                    $vpcURL .= '&' . urlencode($key) . "=" . urlencode($value);
                }
                $md5Hash .= $value;
            }
        }

        if (strlen($SECURE_SECRET) > 0) {
            $vpcURL .= "&vpc_SecureHash=" . strtoupper(md5($md5Hash));
        }
        header("Location: " . $vpcURL)

подробный результат доступен здесь

1 голос
/ 28 января 2016

Я попробовал интеграцию MIGS MasterCard в Python Django. Я пережил много проблем. Вот мой опыт интеграции MIGS с моим веб-приложением. Я использовал ссылку интеграции VPC 3.1.21.1

  1. При реализации VPC Mode1: я получил 400 Bad запрос. Что связано с безопасным хеш-кодом для моего случая. Эта ошибка возникает, если пользователь отправляет неправильные имена полей или несортированный порядок.

  2. После устранения ошибки Mode1 я использовал выбор внешнего платежа (EPS), куда я отправляю дополнительные поля VPC_card и VPC_gateway с параметрами VPC Mode1. Я получил 400 Плохой запрос. Так что после долгого разговора с командой поддержки MIGS. Мы решаем это путем замены vpc_card на vpc_Card и vpc_Gateway. Который был ошибкой документа.

  3. Как только я смог обойти страницу типа карты. Я попытался завершить реализацию режима 2 VPC. Итак, в этом случае я добавил vpc_CardNum, vpc_vpc_CardExp, vpc_CardSecurityCode дополнительные поля с указанным выше запросом точки. Я отправляю запрос GET. Это не работает. Для информации о карте или Mode2 мы должны использовать запрос POST.

  4. Для VPC режима 2 мы должны использовать запрос POST с HTTPS, а не HTTP. Самозаверяющий сертификат будет в порядке. Итак, я отправляю HTTPS POST-запрос с дополнительным параметром, но он все равно не работает, я получил 403 запрещенную ошибку. Потому что Content-type - это application / json для моего вызова ajax. Таким образом, после использования стандартного типа содержимого POST. Работало нормально.

Пример кода для разработчика на Python: здесь, в migs.config.app, я добавляю системную переменную, которая не имеет ничего общего с Migs. Таким образом, пользователь может игнорировать это.

import hashlib
import urllib, urllib2
from migs.config.app_config import *


'''
This method is for sorting the fields and creating an MD5 secure hash.
@param fields is a map of all the incoming hey-value pairs from the VPC
@param buf is the hash being returned for comparison to the incoming hash
'''


class MigsClient(object):

def __init__(self, secure_token, vpc_url, server_name):
    self.secure_secret  = secure_token
    self.vpcURL = vpc_url
    self.server_name = server_name    

def hash_all_fields(self,fields):
    buf = ""
    # create a list and sort it
    fieldNames = fields.keys();
    fieldNames.sort()
    # create a buffer for the md5 input and add the secure secret first
    buf = buf + self.secure_secret
    for key in fieldNames:
        print key,fields[key]
        buf = buf + fields[key] 
    # iterate through the list and add the remaining field values
    # create the md5 hash and UTF-8 encode it
    try:
        m = hashlib.md5()
        m.update(buf)
        ba = m.hexdigest()
        ba = ba.upper()
        return ba

    except Exception,e:
        import traceback 
        traceback.print_exc()


def setup(self, fields,additional_fields=None):
    #The Page does a redirect to the Virtual Payment Client
    #retrieve all the parameters into a hash map
    # no need to send the vpc url, EnableAVSdata and submit button to the vpc

    '''
    Retrieve the order page URL from the incoming order page and add it to 
    the hash map. This is only here to give the user the easy ability to go 
    back to the Order page. This would not be required in a production system
    NB. Other merchant application fields can be added in the same manner
    '''

    '''
    Create MD5 secure hash and insert it into the hash map if it was created
    created. Remember if self.secure_secret = "" it will not be created
    '''
    if self.secure_secret:
        secureHash = self.hash_all_fields(fields);
        fields["vpc_SecureHash"] = secureHash;

    # Create a redirection URL
    buf = self.vpcURL+'?';
    if not additional_fields:
        buf  = buf + urllib.urlencode(fields)
    else:
        buf  = buf + urllib.urlencode(fields)+"&"+urllib.urlencode(additional_fields) 
    return buf
    #return fields["vpc_ReturnURL"], buf


def post_setup(self,fields, additional_fields=None):

    try:
        if self.secure_secret:
            secureHash = self.hash_all_fields(fields);
            fields["vpc_SecureHash"] = secureHash;

        return self.vpcURL,fields
    except:
        import traceback
        traceback.print_exc()

Выше приведен пример кода, который пользователь может использовать для сортировки и создания запроса Get, запроса POST и словаря записей.

...