微信支付踩坑总结
微信支付踩坑总结
Alex- 前几天帮助朋友解决了下微信支付问题,把遇到的问题汇总下,以后遇到方便回顾。
微信支付操作流程
- 支付前
统一下单
(预下单) ,返回预支付交易会话标识 - 带着返回的信息及认证签名信息去支付
- 支付完成返回结果(同时会给服务端返回支付结果,这个比较赞)
就这么个流程、app和后端交互还是纯粹服务端支付都基本这个逻辑。支付实例
- 统一下单
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18$moeny = $orderInfo['money'];
$tal_fee = $moeny * 100; //单位分
$input = new \WxPayUnifiedOrder(); //sdk方法
$input->SetBody("xx科技-xx增值服务"); //设置相关参数
$input->SetAttach("微信支付");
$input->SetOut_trade_no($orderInfo['id']);
$input->SetTotal_fee($tal_fee);
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
$input->SetGoods_tag("WXG");
//$notifyUrl = U('api/updateorder/notify','','',true); //这一步 url中不允许包含参数,意味着只能使用静态地址
//如果启用了伪静态就可以使用这种地址,否则就配置固定地址吧
$notifyUrl = C('WXPAY_NOTIFYURL'); //thinkphp 配置项里设置的回调地址
$input->SetNotify_url($notifyUrl); //设置微信支付成功通知地址
$input->SetTrade_type("APP"); //根据实际场景设置 这是通过php请求下单后返回信息给app 让app调起的支付 App方式不需要传openId
$input->SetProduct_id($orderInfo['xx_id']);
$order = \WxPayApi::unifiedOrder($input); //通过sdk将数据转换xml 并curl请求发送 - 将信息返给app
通过上一步,请求预下成功单后,后端执行二次签名后,数据返给app。app执行调起微信支付操作。
这一步官方文档步骤3:统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP。参与签名的字段名为appId,partnerId,prepayId,nonceStr,timeStamp,package。注意:package的值格式为Sign=WXPay
这里有坑需要注意,微信严格区分大小写,这里的大写全都需要使用小写1
2
3
4
5
6
7
8
9
10
11$time = time();
//涉及签名字段
$signData = array(
'appid' => $order['appid'],
'partnerid' => C('WXPAY_MCHID'),
'prepayid' => $order['prepay_id'],
'noncestr' => $order['nonce_str'],
'timestamp' => $time,
'package' => 'Sign=WXPay',
);
//组合完以后执行二次签名,并把需要数据传给前端支付成功以后
- 后端需要验证微信成功回调、处理支付成功业务逻辑。这里回调结果通知采用的是流方式回传。
1
2
3$xml = file_get_contents('php://input');
//接收回调通知
//todo 签名验证、业务逻辑处理微信支付常见错误问题需要注意的地方
- 无回调通知: 确认url是否静态地址,不能带有参数,保证可访问的地址。
- app端调不起App : 检查二次签名,只有介绍的几个字段参与二次签名,且字母区分大小写。
- 错误码58: 注意检查curl证书地址,如果地址正确且一直报58,尝试改用绝对地址。
- 其他下载sdk demo 过一遍就基本ok了。在看看文档。
相关链接
- sdk demo地址: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1
- 业务流程及Api文档地址:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_3
- 常见curl错误码:http://www.cnblogs.com/wainiwann/p/3492939.html