php微信公众号notify处理,整合ThinkPHP功能系列之微信公众号支付

format,png

微信公众号支付不同于H5支付,博客之前发过关于H5支付的,并且也在Github上开源单文件,前段时间也更新了一部分代码,今天来发一篇Thinkphp框架整合微信公众号支付

微信公众号支付是通过调用微信支付提供的JSAPI接口来调起微信支付模块从而来完成支付,多数情况都是在微信中开发商城所使用,因此页面必须是在微信中打开的,不然是不可能调起来支付的

导入SDK

第一步依旧是导入集成好的SDK,路径是/ThinkPHP/Library/Vendor/Weixin/WeChatPay

配置项

导入以后,主要的还是配置我们微信支付所需要的参数/Application/Common/Conf/config.php,我的项目中将微信支付参数单独配置,然后在config中使用LOAD_EXT_CONFIG加载数据配置,因为如果配置多的话看着就有点乱的感觉,比如什么db数据库配置,email发送邮件配置等等

调用

这块因为是调用微信的JSAPI接口来调起支付,所以我使用ajax来请求接口:/Application/Home/Controller/PayController.class.php

public function pay()

{

//部分代码逻辑省略

vendor('Weixin.WeChatPay');

$config = C('WECHAT');

$model = new WeChatPay($config['mchId'],$config['appId'],$config['apiKey']);

$result = $model->createJsBizPackage($user['wx_openid'],$order['money'],$order['order_sn'],'syz',U('pay/notify',[],[],true),time());

$this->ajaxReturn(['code' => 2000,'result' => $result]);

}

调用createJsBizPackage方法来进行支付的时候,需要传递用户的openid,订单金额,订单号,以及订单名称,回调地址,以及时间戳,这样上面的参数明白了吧?不懂的自己看一下SDK,把上面的参数补齐

既然是js调用当然也需要html页面的支持:/Application/Home/View/Pay/index.html

微信支付

购买

//调用微信JS api 支付

function jsApiCall(json)

{

WeixinJSBridge.invoke(

'getBrandWCPayRequest',

json,

function(res){

WeixinJSBridge.log(res.err_msg);

if(res.err_msg == "get_brand_wcpay_request:ok"){

// 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。

alert(res.err_code+res.err_desc+res.err_msg);

}else{

//显示错误信息

alert(res.err_code+res.err_desc+res.err_msg);

}

}

);

}

function callpay()

{

$.ajax({

url:"{:U('pay/pay')}?id={$order_id}", // 这里我是通过id去查订单号的

type:"GET",

success:function(res){

if (typeof WeixinJSBridge == "undefined"){

if( document.addEventListener ){

document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);

}else if (document.attachEvent){

document.attachEvent('WeixinJSBridgeReady', jsApiCall);

document.attachEvent('onWeixinJSBridgeReady', jsApiCall);

}

}else{

jsApiCall(res.result);

}

}

})

}

如果出现签名错误,可以使用官方的微信公众平台支付接口调试工具,校验一下自己的签名是否正确

异步回调

微信支付回调是异步的:/Application/Home/Controller/PayController.class.php,通知频率为15/15/30/180/1800/1800/1800/1800/3600,单位:秒,异步直接处理业务逻辑就可以

/**

* 微信支付回调

*/

public function notify()

{

$postStr = file_get_contents("php://input");

$post = json_decode(json_encode(simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA)), true);

if($post['result_code'] == 'SUCCESS' && $post['return_code'] == 'SUCCESS') {

// 支付成功扭转订单状态

$order_sn = $post['out_trade_no'];

//$order_sn = 'SY201805121145102321380644';

//完成你的业务逻辑 修改状态之类的

//给微信返回 防止重复通知

return '';

}else{

return ['msg' => '支付失败'];

}

}

然后就完了 😳 代码会上传到Github,如果项目对你有所帮助,请给一个 star ?

任何个人或团体,未经允许禁止转载本文:《整合ThinkPHP功能系列之微信公众号支付》,谢谢合作!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值