thinkphp3.2整合银联手机网页支付

1.和银联签约,签约成功之后才进行技术集成,到银联官方下载手机网页支付的技术文档和demo代码;

https://open.unionpay.com/ajweb/help/file/techFile?productId=66

demo里面有个readme.txt会告诉你要修改哪些东西


2.同样,如果遇到和支付宝一样的验签失败,原因很可能就是证书有问题,还有,测试环境手机网页打开之后会老是提示证书不受信任,转生产之后就不会,建议一开始就用生成环境,怎么转可以参考https://open.unionpay.com/ajweb/help/faq/list?id=39&level=0&from=0


3.测试可以完成支付,就可以直接把代码库

移植到thinkphp的以下文件路径中


4.当然还需要把需要用到的证书copy的工程中,配置文件中需要改变一下证书的路径,都是绝对路径来的。


5.直接引入php文件就可以进行支付了。

<?php
namespace Mobile\Action;
class UnionPayAction extends BaseAction{

    public function doPay(){
        vendor('UnionPayMobile.common');
        vendor('UnionPayMobile.SDKConfig');
        vendor('UnionPayMobile.secureUtil');
        vendor('UnionPayMobile.PhpLog');
        $log = new \PhpLog( SDK_LOG_FILE_PATH, "PRC", SDK_LOG_LEVEL );
        $log->LogInfo ( "============处理前台请求开始===============" );
        //获取商户订单的信息,填写信息提交到支付宝订单
        $data = M('orders')->where('order_id='.session('orderID'))->find();
        $sum = $data['order_sum_all']*100;
        // 初始化日志
        $params = array(
        'version' => '5.0.0',               //版本号
        'encoding' => 'utf-8',              //编码方式
        'certId' => getSignCertId (),           //证书ID
        'txnType' => '01',              //交易类型  
        'txnSubType' => '01',               //交易子类
        'bizType' => '000201',              //业务类型
        'frontUrl' =>  SDK_FRONT_NOTIFY_URL,        //前台通知地址
        'backUrl' => SDK_BACK_NOTIFY_URL,       //后台通知地址    
        'signMethod' => '01',       //签名方法
        'channelType' => '08',      //渠道类型,07-PC,08-手机
        'accessType' => '0',        //接入类型
        'merId' => '',               //商户代码,请改自己的商户号
        'orderId' => $data['order_num'],  //商户订单号
        'txnTime' => date('YmdHis'),    //订单发送时间
        'txnAmt' => $sum,       //交易金额,单位分
        'currencyCode' => '156',    //交易币种
        'defaultPayType' => '0001', //默认支付方式    
        //'orderDesc' => '订单描述',  //订单描述,网关支付和wap支付暂时不起作用
        'reqReserved' =>' 透传信息', //请求方保留域,透传字段,查询、通知、对账文件中均会原样出现
        );
        // 签名
        sign ( $params );
        // 前台请求地址
        $front_uri = SDK_FRONT_TRANS_URL;
        $log->LogInfo ( "前台请求地址为>" . $front_uri );
        // 构造 自动提交的表单
        $html_form = create_html ( $params, $front_uri );

        $log->LogInfo ( "-------前台交易自动提交表单>--begin----" );
        $log->LogInfo ( $html_form );
        $log->LogInfo ( "-------前台交易自动提交表单>--end-------" );
        $log->LogInfo ( "============处理前台请求 结束===========" );
        echo $html_form;
    }
    
        /******************************
        服务器同步通知页面方法
        其实这里就是将notify_url.php文件中的代码复制过来进行处理
        
        *******************************/
    function createNote(){
        vendor('UnionPayMobile.common');
        vendor('UnionPayMobile.SDKConfig');
        vendor('UnionPayMobile.secureUtil');
        vendor('UnionPayMobile.PhpLog');
        $log = new \PhpLog( SDK_LOG_FILE_PATH, "PRC", SDK_LOG_LEVEL );
        if (isset ( $_POST ['signature'] )) { 
            if(verify ( $_POST )){
                //改变订单状态,处理后台的订单逻辑
                
            }

        } else {
            echo '签名为空';
        }
    }
     /******************************
        服务器异步通知页面方法
        其实这里就是将notify_url.php文件中的代码复制过来进行处理
        
        *******************************/
    function sureNote(){
        vendor('UnionPayMobile.common');
        vendor('UnionPayMobile.SDKConfig');
        vendor('UnionPayMobile.secureUtil');
        vendor('UnionPayMobile.PhpLog');
        $log = new \PhpLog( SDK_LOG_FILE_PATH, "PRC", SDK_LOG_LEVEL );
       foreach ( $_POST as $key => $val ) {
         P(isset($mpi_arr[$key]) ?$mpi_arr[$key] : $key);
         P($val);
       }
       if (isset ( $_POST ['signature'] )) { 
            P(verify ( $_POST ) ? '验签成功' : '验签失败');
            P($orderId = $_POST ['orderId']); //其他字段也可用类似方式获取
            //改变订单状态,处理后台的订单逻辑    
        } else {
            echo '签名为空';
        }
    }
   
}
?>
写了一个集成的demo,改修改的东西,在README.md中有简单介绍。





下载链接 http://download.csdn.net/detail/zhengxiaojunkite/9379301




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值