您的位置:首页 > 编程语言 > PHP开发

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

2015-12-27 15:35 621 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: