首页 > 代码库 > Moneybookers API支付方式开发 步骤
Moneybookers API支付方式开发 步骤
开发文档:
支付说明手册
步骤:
1.使用商家帐号,登录到www.moneybookers.com,核对商家信息是否正确。
2.在账户-->商家工具(设置)
a.API/MQI password:这个pwd的设置,是用在接口中,用于二次验证订单的真实性要用到。(可选,非必须)
b. 在同一个页面中,Secret word(密钥)的设置,在顶部。注意程度是10,必须是小写,同时不能包含一些特殊字符。(必须填写,接口要用到)
3.准备工作已经OK,现在就可以写API了。
a.组合FORM表单,提交交易信息,开始支付。
参数 | 是否必须 | 值 |
pay_to_email | 是 | 商家的帐号(可在商家后台更改) |
pay_from_email | 可选 | 如果是使用的信用卡支付可以传递,其他支付可以不传 |
transaction_id | 是 | 交易的订单号 |
amount | 是 | 交易金额 |
currency | 是 | 交易货币 |
return_url | 可选 | 支付完成后,跳回的网页地址 |
cancel_url | 是 | 支付过程中,取消或出错后,跳转的地址 |
status_url | 是 | 支付完成后(成功时),MB的server(POST)传递支付信息(curl方式),处理交易订单状态的地址 |
hide_login | 可选 | 是否隐藏掉MB支付页面右边的登录表单,是用信用卡时,可以传递【1:隐藏,0:显示】 |
merchant_fields | 可选 | 回传时,会加到status_url作为参数返回.如果使用了,比如我传递mytest那么就必须传递mytest的参数. |
mytest | 可选 | 依据merchant_fields参数,有传递,则必传,不然为空值 |
merchant_id | 是 | 商家的ID,可以理解为主键ID(唯一标识).可以在后台找到,也可以向MB索要 |
payment_methods | 可选 | 如果想指定在MB支付时,只使用指定的支付方式,就可以传递,比如VISA(VSA),具体可参照:测试页面 Split Gateway 中(mark 1) |
其他参数不重要.... |
b.组合后的表单信息。
<form method="post" action="https://www.moneybookers.com/app/payment.pl" > <input type="hidden" name="pay_to_email" value="商家帐号"> <input type="hidden" name="recipient_description" value="商家名称"> <input type="hidden" name="transaction_id" value="订单号"> <input type="hidden" name="amount" value="金额"> <input type="hidden" name="currency" value="货币(USD..)"> <input type="hidden" name="return_url" value="支付完成后返回地址"> <input type="hidden" name="cancel_url" value="支付失败/取消地址"> <input type="hidden" name="status_url" value="支付成功处理地址"> <input type="hidden" name="hide_login" value="0"> <input type=‘hidden‘ name=‘merchant_fields‘ value="payapi"> <input type="hidden" name="payapi" value="test"> <input type="submit" style="display:none"></form><script>document.forms[0].submit();</script>
c.回传处理订单数据有两部分:
I. 订单成功后回传页面的处理(status_url):接收的参数说明.
参数 | 说明 |
transaction_id | 交易时,Form传递的订单号 |
merchant_id | 商家ID |
pay_to_email | 商家email帐号 |
pay_from_email | 买家(email帐号) |
mb_amount | MB的交易金额 (已经mb_currency转换后交易的金额,可能和传递的不一样) |
mb_currency | MB的交易货币 (可能和传递currency不一样,这个是MB的货币,EUR) |
mb_transaction_id | MB的交易订单(商家后台可以查看交易成功的订单) |
status | 交易的状态 |
md5sig | 加密码(下面详细说明) |
amount | 我们传递的金额 |
currency | 我们传递的货币 |
payment_type | 在MB中选择的交易支付方式。可参照 mark 1 |
II. 接收到了参数,那么就要校验数据是否跟下单时的数据一致。一般的做法就是根据获取的订单号,查询数据库信息,与之对比。无误才能处理。
因为有可能模拟数据,这样就可以避免不安全的情况。
III. status(交易回传的状态):MB文档中有5种状态,分别是:
2->Processed(支付成功)
0->Pendding(已经下单,但未支付)
-1->Cancelled(用户customer取消订单,可以是取消0状态的订单,或中途没有交易下去的订单)
-2->Failed(支付失败)
-3->Chargeback(退款,用户customer,退款后,会通知status_url )
IV.md5sig :通过:
$sign_msg_str = $merchant_id . $transaction_id. strtoupper(md5($Secret key)) . $mb_amount . $mb_currency . $status;$sign_msg = STRTOUPPER(MD5($sign_msg_str));
这样的规则组合后加密的,这样我们在接收到md5sig后就可以按照上面的sign_msg对比,这样就能够基本杜绝假的数据。
V. 这些步骤就可以处理返回的数据,之后就处理自己的业务逻辑即可。
d. 第二种就是取消交易的情况。这种情况是没有成功的,但MB会通知合作商地址:(return_url)。以GET方式回传transaction_id,参数。 这个地方自己简单处理即可。
4.至于二次验证的部分。商家设置,开发手册 的page 8,和page 9. 基本流程是。根据商家提供的地址和要传递的参数,step1(page 8)中, curl的方式传递给MB, 然后就可以获取MB返回的 验证sid,而step 2 则是,结合sid和参数,去获取订单的详细支付信息。这部分也比较简单。
至此MB主要的东西就说完了。一些其他细节可以参考文档。或使用我提供的demo.
没发现怎么上传附件,所以贴出代码:
<?php/* * Money bookers */class Mbookers_api { var $account; //商戶名:委託單位代號 var $key; //商戶私鑰 var $orderno; //訂單號 var $currency; //貨幣類型 var $amount; //金錢數 var $action; //發送到對方伺服器的網址 var $merchant; //商戶編號 var $merchant_name; //商戶名稱 /**支付網關向我系統發信息**/ var $rsSuccessUrl; //成功的處理網址 var $rsFailUrl; //失敗的處理網址 /****初始化商家信息 01 ****/ function __construct() { $this->account = "xxx@xx.com.hk"; $this->key = "123123123"; $this->merchant = "2348234"; $this->merchant_name = "商家名称"; $this->action = "https://www.moneybookers.com/app/payment.pl"; $this->rsSuccessUrl = "http://www.yousite.com/receive.php"; $this->rsFailUrl = "http://www.yousite.com/failure.php"; $this->rsNoticeUrl = $this->rsFailUrl; } /****發送請求 02 ****/ function send($info=array()) { $temp = <<<EOD <form method="post" action="{$this->action}"> <input type="hidden" name="pay_to_email" value="http://www.mamicode.com/{$this->account}"> <input type="hidden" name="recipient_description" value="http://www.mamicode.com/{$this->merchant_name}"> <input type="hidden" name="transaction_id" value="http://www.mamicode.com/{$info[‘orderno‘]}"> <input type="hidden" name="amount" value="http://www.mamicode.com/{$info->[‘amount‘]}"> <input type="hidden" name="currency" value="http://www.mamicode.com/{$info->[‘currency‘]}"> <input type="hidden" name="return_url" value="http://www.mamicode.com/{$this->rsNoticeUrl}"> <input type="hidden" name="cancel_url" value="http://www.mamicode.com/{$this->rsFailUrl}"> <input type="hidden" name="status_url" value="http://www.mamicode.com/{$this->rsSuccessUrl}"> <input type="hidden" name="payment_methods" value="http://www.mamicode.com/VSA"> <input type="hidden" name="hide_login" value="http://www.mamicode.com/1"> <input type=‘hidden‘ name=‘merchant_fields‘ value="http://www.mamicode.com/payapi"> <input type="hidden" name="payapi" value="http://www.mamicode.com/MBookers"> <input type="submit" style="display:none"> </form> <script>document.forms[0].submit();</script>EOD; $result = trim($temp); echo $result; } /****接收請求 03 02 ****/ function receive($debug) { //trackback payapi to get the payment info $payback = $this->getPayTrackback($debug); if ($debug) { echo("從getPayTrackback返回的數據:<hr />"); dump($payback); } //檢查返回結果 if (empty($payback) && !is_array($payback)) $tb = "err0101"; elseif ($this->orderno != $payback["orderno"]) $tb = "err0102"; //訂單號是否修改 elseif ($this->amount != $payback["amount"]) $tb = "err0105"; //金錢 elseif ($this->account != $payback[‘account‘]) $tb = "err0106"; //帳號 elseif ($this->currency != $payback[‘currency‘]) $tb = "err0103"; //貨幣 //如果通過以上檢測,則返回成功的驗證代碼 elseif ($payback[‘pay_rs‘] && ‘2‘ == $payback[‘pay_rs‘]) $tb = "Completed"; //成功 else $tb = "err0301"; //無修改但支付失敗 $rs["rs"] = $tb; $rs["pay_id"] = $payback["pay_id"]; $rs["pay_rs"] = $payback["pay_rs"]; $rs["pay_username"] = $payback["pay_username"]; $rs["memo"] = $payback; return $rs; } //生成返回的MD5加密摘要 function getPayTrackback($debug) { $orderno = $_POST[‘transaction_id‘]; $merchant_id= $_POST[‘merchant_id‘]; $account = $_POST[‘pay_to_email‘]; $amount = $_POST[‘mb_amount‘]; $currency = $_POST[‘mb_currency‘]; $pay_id = $_POST[‘mb_transaction_id‘]; $pay_rs = $_POST[‘status‘]); $pay_from_email = $_POST[‘pay_from_email‘]; $md5sig = $_POST[‘md5sig‘]; $sign_msg_str = $merchant_id . $orderno . strtoupper(md5($this->key)) . $amount . $currency . $pay_rs; $sign_msg = STRTOUPPER(MD5($sign_msg_str)); if($md5sig != $sign_msg) { return false; } if(‘2‘ != $pay_rs) { return false; } $result[‘account‘] = $account; $result[‘pay_id‘] = $pay_id; $result[‘pay_rs‘] = $pay_rs; $result[‘pay_username‘] = $pay_from_email; $result[‘amount‘] = $amount; $result[‘currency‘] = $currency; $result[‘orderno‘] = $orderno; return $result; } }
Moneybookers API支付方式开发 步骤