开发文档:

支付说明手册

步骤:

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.

DEMO代码:

<?php
/*
* Money bookers
*/
class Mbookers_api {
var $account; //商戶名:email
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="{$this->account}">
<input type="hidden" name="recipient_description" value="{$this->merchant_name}">
<input type="hidden" name="transaction_id" value="{$info['orderno']}">
<input type="hidden" name="amount" value="{$info['amount']}">
<input type="hidden" name="currency" value="{$info['currency']}">
<input type="hidden" name="return_url" value="{$this->rsNoticeUrl}">
<input type="hidden" name="cancel_url" value="{$this->rsFailUrl}">
<input type="hidden" name="status_url" value="{$this->rsSuccessUrl}">
<input type="hidden" name="payment_methods" value="VSA">
<input type="hidden" name="hide_login" value="1">
<input type='hidden' name='merchant_fields' value="payapi">
<input type="hidden" name="payapi" value="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支付方式开发 步骤的更多相关文章

  1. ActiveMQ学习笔记(4)----JMS的API结构和开发步骤

    1. JMS的API结构 其实上图中的五个API在第一节中我们都已经使用到了.本节将会讲非持久化和持久化topic的使用. 2. JMS的基本开发步骤 1. 创建一个JMS工厂,  Connectio ...

  2. ebay的api的开发技术笔记

    使用eBay API基本步骤介绍 要开始使用eBay API,需要如下基本步骤: 1.    注册开发帐号: https://developer.ebay.com/join/Default.aspx ...

  3. Android_app项目开发步骤总结

    做了几个android企业应用项目后,总结了项目的基本开发步骤.希望可以交流. 一 应用规划:      ※确定功能.      ※必须的界面及界面跳转的流程.      ※须要的数据及数据的来源及格 ...

  4. React+Redux学习笔记:React+Redux简易开发步骤

    前言 React+Redux 分为两部分: UI组件:即React组件,也叫用户自定义UI组件,用于渲染DOM 容器组件:即Redux逻辑,处理数据和业务逻辑,支持所有Redux API,参考之前的文 ...

  5. 安卓app开发-03-项目的基本开发步骤

    android项目的基本开发步骤 这里分享一下开发 安卓 app 的流程,当然有些感觉不必要,其实不然,前期工作也是极为重要的额,就像开发的时候如果目标不对的话,到后期后很迷的,所以一定要提前做好规划 ...

  6. Spark RDD API扩展开发

    原文链接: Spark RDD API扩展开发(1) Spark RDD API扩展开发(2):自定义RDD 我们都知道,Apache Spark内置了很多操作数据的API.但是很多时候,当我们在现实 ...

  7. Thrift实现C#调用Java开发步骤详解

    概述 Thrift实现C#调用Java开发步骤详解 详细 代码下载:http://www.demodashi.com/demo/10946.html Apache Thrift 是 Facebook ...

  8. Django开发步骤

    Django开发步骤 Django框架每次开发的初始化的套路都基本一样,这里记录一下. 安装Django 首先安装Python软件,上python官网下载对应的安装包.接下来就是安装Django: p ...

  9. 微信H5支付开发步骤总结

    * 开发步骤: * 1.在微信公众号平台设置授权目录,即jsapi.php所在的目录 * 2.在微信支付平台下载证书,放到cert目录 * 3.在微信支付平台设置API秘钥,同时在WxPay.Conf ...

随机推荐

  1. Python ORM Storm 源码修改

    安装 storm : pip install storm 目标:修改 Storm 源代码以支持自动重连文件:python安装目录/site-packages/storm/database.py 在41 ...

  2. BZOJ 4576: [Usaco2016 Open]262144

    Description 一个序列,每次可以将两个相同的数合成一个数,价值+1,求最后最大价值 \(n \leqslant 262144\) Sol DP. 这道题是 BZOJ 4580: [Usaco ...

  3. C# 委托及各种写法

    委托是神马? 委托是一个类型安全的对象,它指向程序中另一个以后会被调用的方法(或多个方法).通俗的说,委托是一个可以引用方法的对象,当创建一个委托,也就创建一个引用方法的对象,进而就可以调用那个方法, ...

  4. struts2 拦截器

    拦截器:对Action的访问.可以拦截到Action中某个方法.与过滤器不同,过滤器过滤的是请求.过滤JSP.html.但是拦截器不能拦截jsp.html的访问. Struts2 拦截器在访问某个 A ...

  5. Python之Web前端Dom, jQuery

    Python之Web前端: Dom   jQuery ###Dom 一. 什么是Dom? 文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它 ...

  6. Lamp搭建bugfree

    1.下载bugfree安装包 2.将bugfree安装包解压到/home/wwwroot/default目录下 unzip bugfree.zip  -d /home/wwwroot/default/ ...

  7. Linux常用命令学习3---(文件的压缩和解压缩命令zip unzip tar、关机和重启命令shutdown reboot……)

    1.压缩和解压缩命令    常用压缩格式:.zip..gz..bz2..tar.gz..tar.bz2..rar .zip格式压缩和解压缩命令        zip 压缩文件名 源文件:压缩文件   ...

  8. 使用SQL Server Analysis Services数据挖掘的关联规则实现商品推荐功能(七)

    假如你有一个购物类的网站,那么你如何给你的客户来推荐产品呢?这个功能在很多电商类网站都有,那么,通过SQL Server Analysis Services的数据挖掘功能,你也可以轻松的来构建类似的功 ...

  9. Apache, Tomcat, JK Configuration Example

    Example of worker.properties: worker.list=myWorker,yourWorker worker.myWorker.port=7505 worker.myWor ...

  10. C#-ASP.NET MVC-架构【1】-自定义错误页

    自定义异常本来是一件很简单的事情,没想到在做的过程中遇到各种坑,目前来说,还有Session过期和Ajax请求这两种情况没有特殊处理,其他的基本已经可以使用,等慢慢完善吧. 一.在web.config ...