使用2方集成模型的PHP万事达集成



我正在使用2-Party集成模型进行MIGS与php的集成,我已经在网上下载了一些好的pdf文件,除了给出如何进行集成的草图之外,没有人从代码方面解释集成,从而使初学者开发人员很难遵循或理解。

这是我收集客户信用卡详细信息和其他账单信息的表单:

<form action="" method="post">
<table>
<tr>
<td>Cardholder's First Name:</td>
<td><input type="text" name="First_Name"></td>
</tr><tr>
<td>Cardholder's Last Name:</td>
<td><input type="text" name="Last_Name"></td>
</tr><tr>
<td>Credit Card Number:</td>
<td><input type="text" name="Card_Num"></td>
</tr><tr>
<td colspan="2" align="center">
<small>Please enter the expiration date as follows:
two digits of month and two digits of year.
For instance, January 2008 has to be entered as 0108:</small></td>
</tr><tr>
<td>Exp. date (mmyy):</td>
<td><input type="text" name="Exp_Date" maxlength="4"></td>
</tr><tr>
<td colspan="2" align="center">
<small>The Card Verification Code (Card ID or CVV2)
is required for American Express,Visa and MasterCard.
Please enter: for American Express - 4 digits on front of card;
for Visa and Mastercard - last 3 digits on back of card:</small>
</td>
</tr><tr>
<td>Card Number:</td>
<td><input type="text" name="Card_Code"></td>
</tr><tr>
<td colspan="2" align="center"><small>
Please enter the address at which the credit card bills are received:
</small></td>
</tr><tr>
<td>Street Address:</td>
<td><input type="text" name="Address"></td>
</tr><tr>
<td>City:</td>
<td><input type="text" name="City"></td>
</tr><tr>
<td>State/Province:</td>
<td><input type="text" name="State"></td>
</tr><tr>
<td>Zip/Postal Code:</td>
<td><input type="text" name="Zip"></td>
</tr><tr>
<td>Country:</td>
<td><input type="text" name="Country"></td>
</tr><tr>
<td colspan="2" align="center">
<input type="submit" value="Submit payment">
</td>
</tr>
</table>
</form>
下面是PHP集成代码:
$accessCode    =  "";//value from migs payment gateway
$merchantId    =  "";//value from migs payment gateway
$amount = 1000;
$unique_id = rand(999999,8988888888);//this is a sample random no
$order = rand(10,100);
$testarr = array(
"vpc_Amount" => $amount*100,//Final price should be multifly by 100
"vpc_Currency" => 'KES',
"vpc_AccessCode" => $accessCode,//Put your access code here
"vpc_Command"=> "pay",
"vpc_Locale"=> "en",
"vpc_MerchTxnRef"=> $unique_id , //This should be something unique number, i have used the session id for this
"vpc_Merchant"=> $merchantId,//Add your merchant number here
"vpc_OrderInfo"=> $order,//this also better to be a unique number
"vpc_ReturnURL"=> "http:/mydomain/mastercard/success.php",
"vpc_Version"=> "1");
ksort($testarr);
$SECURE_SECRET =  ""; //value from migs payment gateway
$securehash = $SECURE_SECRET;
$url = "";
foreach ($testarr as $key => $value)
{
$securehash .= $value;
$url .= $key."=".urlencode($value)."&";
}
$securehash = md5($securehash);//Encoding
$url .= "vpc_SecureHash=".$securehash;
header("location:https://migs.mastercard.com.au/vpcpay?$url");

然后在我的返回url上执行转储var_dump($_GET);返回以下内容:

mydomain/mastercard/success.php?vpc_Amount=100000&vpc_BatchNo=0&vpc_Command=pay&vpc_Locale=en&vpc_MerchTxnRef=5204024700&vpc_Merchant=$merchantId&vpc_Message=Merchant+[$merchantId]+does+not+exist&vpc_OrderInfo=97&vpc_TransactionNo=0&vpc_TxnResponseCode=7&vpc_Version=1

它返回一条消息,说商家不存在。这是我的一个问题。

所以把我的问题编号:

  1. 我把哪个url作为我的"动作"在表单中,在用户输入他们的详细信息后,他们的详细信息由支付服务器处理,我如何将表单与支付服务器集成?

  2. 为什么我收到一个"商家不存在"的响应?

这里有几处需要修改:

生成事务/订单id

这些数字不需要是随机的,但它们应该是唯一的。如果您使用mysql数据库来存储订单,最简单的解决方案是使用数据库的自动增量字段来生成订单和事务id。

  • 将状态为"pending"的订单记录插入数据库(在订单表中)
  • 记录插入的ID
  • 将状态为"pending"的事务记录插入数据库(在事务表中)
  • 记录插入的事务ID

然后,对刚刚为请求插入的行使用订单和事务id。会话id不是唯一的——它们会重复。另外,一个介于10-100之间的随机数将会非常频繁地重复。

发送付款信息

您当前没有将信用卡信息发送到支付网关-您需要在发送的数据中包含信用卡信息。

$testarr['vpc_CardNum'] = $_POST['Card_Num'];
$testarr['vpc_CardExp'] $_POST['Card_Exp'];

发送数据:

双方集成不涉及客户端的浏览器—您当前将它们重定向到MIGS站点,这对于这种集成方法是不正确的。

相反,您将希望使用curl将数据直接传输到支付网关。

$ch = curl_init("https://migs.mastercard.com.au/vpcpay");
curl_setopt_array($ch, array(
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => $testarr,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HEADER => false
));
$response = curl_exec($ch);
// process response here

使用双方身份验证,支付表单的操作应该指向PHP脚本,您正在使用该脚本将支付信息发送到MIGS服务器。

您很可能会收到"merchant not found"错误,因为您试图通过GET而不是POST发送支付请求。

最新更新