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

本文档提供了一种集成银联和支付宝手机网页支付的方法。首先需要与银联签约并下载技术文档和DEMO,然后根据readme.txt进行配置修改,特别是证书的处理。在验签过程中,遇到问题可能是证书错误。测试通过后,将代码移植到ThinkPHP框架,并调整证书路径。最后,创建前端支付请求和后台通知处理函数,实现支付流程。附带了一个DEMO下载链接以供参考。

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

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

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

0818b9ca8b590ca3270a3433284dd417.png

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

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

0818b9ca8b590ca3270a3433284dd417.png

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

0818b9ca8b590ca3270a3433284dd417.png

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

5.直接引入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中有简单介绍。

6140efb612d7210a395b1420f3888dfe.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

14ac27e70b4ef5388fbf385a2a9a77db.png

290a71b572e5d48ce3d094483d2f5662.png

7279e1c57c9e4eb54713c109da7c5129.png

下载链接

http://download.youkuaiyun.com/detail/zhengxiaojunkite/9379301

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值