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    =    "[email protected]";
        $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;
    }

}
时间: 2024-08-30 06:00:48

Moneybookers API支付方式开发 步骤的相关文章

ebay的api的开发技术笔记,有点乱

使用eBay API基本步骤介绍 要开始使用eBay API,需要如下基本步骤: 1.    注册开发帐号: https://developer.ebay.com/join/Default.aspx 2.    选择API类型: eBay有大约6种API 开发语言,例如.net和Java的SDK http://developer.ebay.com/products/trading/ http://developer.ebay.com/products/overview/api-by-featur

struts2学习笔记2 -struts2的开发步骤和工作原理

struts2的开发步骤: 1.先定义一个能发送请求的页面,可以是链接,也可以是表单(form) 2.开发action类,struts2对action并没有过多的要求,只要求: a 推荐实现action接口,或继承actionsupport类 b 为每个请求参数都提供feild,并为之提供相应的setter和getter方法 c 该action类应该有无参数构造器 3.配置action类 所有action都需要放在package里配置. <action>元素有如下属性: name 指定该act

Android_app项目开发步骤总结

做了几个android企业应用项目后,总结了项目的基本开发步骤.希望可以交流. 一 应用规划: ※确定功能. ※必须的界面及界面跳转的流程. ※须要的数据及数据的来源及格式. ※是否须要服务端支持. ※是否须要本地数据库支持. ※是否须要特殊权限. ※是否须要后台服务. 二 架构设计: ※分层. ※网络连接. ※数据处理-xml.domain. ※封装Activity. 三 界面设计: ※主界面确定. ※模块界面.列表.查看.编辑界面. ※菜单.button.对话框.提示信息. ※界面整体颜色.

微信硬件开发步骤

微信硬件开发步骤 一. 组册微信测试号 1. 首先登录http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login,然后进行组册,可以申请到一个测试号 2. 填写调试时候的接口配置信息,这样调试的时候微信后台发来的信息都会传送到这个指定的URL网页上面 这里的token相当于一种验证码,可以随意设置,只要与后面自己编写的用来响应微信后台的PHP代码里面的token值一致就可以,类似于一种加密的措施. 二. 注册一台云服务器 由第一步我

Android学习之高德地图的通用功能开发步骤(二)

周一又来了,我就接着上次的开发步骤(一)来吧,继续把高德地图的相关简单功能分享一下 上次写到了第六步,接着写第七步吧. 第七步:定位 + 地图选点 + 路径规划 + 实时导航 以下是我的这个功能NaviMapActivity的页面布局文件: 1 <?xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout xmlns:android="http://schemas.android.com

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

前言 React+Redux 分为两部分: UI组件:即React组件,也叫用户自定义UI组件,用于渲染DOM 容器组件:即Redux逻辑,处理数据和业务逻辑,支持所有Redux API,参考之前的文章:Redux学习笔记:Redux简易开发步骤 而React+Redux是以上两部分结合起来,方便在React中使用Redux,专用库为React-Redux.js.React-Redux.js新增了一些新方法: Provider:容器跟组件,可直接把外部的state传递给所有子组件和UI组件: m

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

android项目的基本开发步骤 这里分享一下开发 安卓 app 的流程,当然有些感觉不必要,其实不然,前期工作也是极为重要的额,就像开发的时候如果目标不对的话,到后期后很迷的,所以一定要提前做好规划,就像上一篇介绍的去做详细的脑图 开发之前还需要做一些准备工作 1.技术储备 a.Java 重要程度: ★★★★★ 2.框架,编程思想,编码规范,设计模式等 b.Xml 重要程度:★★★★ 3.布局,选择器,配置文件等 c.数据库 重要程度:★★★ 4.关系型数据库,SQLite 开发工具 a.Ec

浅谈 PHP 与手机 APP 开发(API 接口开发)

本文内容转载自:http://www.thinkphp.cn/topic/5023.html 这个帖子写给不太了解PHP与API开发的人 一.先简单回答两个问题: 1.PHP 可以开发客户端?答:不可以,因为PHP是脚本语言,是负责完成 B/S架构 或 C/S架构 的S部分,即:服务端的开发.(别去纠结 GTK.WinBinder) 2.为什么选择 PHP 作为开发服务端的首选?答:跨平台(可以运行在UNIX.LINUX.WINDOWS.Mac OS下).低消耗(PHP消耗相当少的系统资源).运

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

转载请注明出处:jiq?钦's technical Blog Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的远程服务调用的框架. 类似的跨语言RPC框架还有ICE.Hessian.Protocol Buffer.Avro等. 1 下载Thrift 下载地址:http://thrift.apache.org/download thrift-0.9.3.exe         用于编译Thrift中间文件生成对应语言代码的工具 thrift-0.9.3.tar