你在阅读本文之前确认你已经仔细阅读了:微信支付 | 商户平台开发文档。
配置
配置在前面的例子中已经提到过了,支付的相关配置如下:
|
创建订单
|
通知url必须为直接可访问的url,不能携带参数。示例:notify_url:“https://pay.weixin.qq.com/wxpay/pay.action”
下单接口
刷卡支付
|
也许你需要生成二维码图片,参考页面底部相关的包推荐
统一下单
公众号支付、扫码支付、APP 支付 都统一使用此接口完成订单的创建。
|
支付结果通知
在用户成功支付后,微信服务器会向该 订单中设置的回调URL 发起一个 POST 请求,请求的内容为一个 XML。里面包含了所有的详细信息,具体请参考:
支付结果通用通知
在本 SDK 中处理回调真的再简单不过了,请求验证你就不用管了,SDK 已经为你做好了,你只需要关注业务即可:
|
这里需要注意的有几个点:
handleNotify
只接收一个callable
参数,通常用一个匿名函数即可。该匿名函数接收两个参数,这两个参数分别为:
$notify
为封装了通知信息的EasyWeChat\Support\Collection
对象,前面已经讲过这里就不赘述了,你可以以对象或者数组形式来读取通知内容,比如:$notify->total_fee
或者$notify['total_fee']
。$successful
这个参数其实就是判断 用户是否付款成功了(result_code == ‘SUCCESS’)
该函数返回值就是告诉微信 “我是否处理完成”,如果你返回一个
false
或者一个具体的错误消息,那么微信会在稍后再次继续通知你,直到你明确的告诉它:“我已经处理完成了”,在函数里return true;
代表处理完成。handleNotify
返回值$response
是一个 Response 对象,如果你要直接输出,使用$response->send()
, 在一些框架里不是输出而是返回:return $response
。
通常我们的处理逻辑大概是下面这样(以下只是伪代码):
|
注意:请把 “支付成功与否” 与 “是否处理完成” 分开,它俩没有必然关系。
比如:微信通知你用户支付完成,但是支付失败了(result_code 为 ‘FAIL’),你应该更新你的订单为支付失败,但是要告诉微信处理完成。
撤销订单API
目前只有 刷卡支付 有此功能。
调用支付接口后请勿立即调用撤销订单API,建议支付后至少15s后再调用撤销订单接口。
|
或者:
|
查询订单
该接口提供所有微信支付订单的查询,商户可以通过该接口主动查询订单状态,完成下一步的业务逻辑。
需要调用查询接口的情况:
- 当商户后台、网络、服务器等出现异常,商户系统最终未接收到支付通知;
- 调用支付接口后,返回系统错误或未知交易状态情况;
- 调用被扫支付API,返回USERPAYING的状态;
- 调用关单或撤销接口API之前,需确认支付状态;
|
或者:
|
关闭订单
注意:订单生成后不能马上调用关单接口,最短调用时间间隔为5分钟。
|
申请退款
当交易发生之后一段时间内,由于买家或者卖家的原因需要退款时,卖家可以通过退款接口将支付款退还给买家,微信支付将在收到退款请求并且验证成功之后,按照退款规则将支付款按原路退到买家帐号上。
注意:
1、交易时间超过一年的订单无法提交退款;
2、微信支付退款支持单笔交易分多次退款,多次退款需要提交原支付订单的商户订单号和设置不同的退款单号。一笔退款失败后重新提交,要采用原来的退款单号。总退款金额不能超过用户实际支付金额。
|
$refundNo 为商户退款单号,自己生成用于自己识别即可。
查询退款
提交退款申请后,通过调用该接口查询退款状态。退款有一定延时,用零钱支付的退款20分钟内到账,银行卡支付的退款3个工作日后重新查询退款状态。
|
下载对账单
|
第二个参数为类型:
- ALL:返回当日所有订单信息(默认值)
- SUCCESS:返回当日成功支付的订单
- REFUND:返回当日退款订单
- REVOKED:已撤销的订单
测速上报
|
转换短链接
|
授权码查询OPENID接口
|
生成支付 JS 配置
有两种发起支付的方式:WeixinJSBridge, JSSDK
WeixinJSBridge:
$json = $payment->configForPayment($prepayId); // 返回 json 字符串,如果想返回数组,传第二个参数 falsejavascript:
...WeixinJSBridge.invoke('getBrandWCPayRequest', = $json ?>,function(res){if(res.err_msg == "get_brand_wcpay_request:ok" ) {// 使用以上方式判断前端返回,微信团队郑重提示:// res.err_msg将在用户支付成功后返回// ok,但并不保证它绝对可靠。}});...JSSDK:
$config = $payment->configForJSSDKPayment($prepayId); // 返回数组javascript:
wx.chooseWXPay({timestamp: = $config['timestamp'] ?>,nonceStr: '= $config['nonceStr'] ?>',package: '= $config['package'] ?>',signType: '= $config['signType'] ?>',paySign: '= $config['paySign'] ?>', // 支付签名success: function (res) {// 支付成功后的回调函数}});
生成共享收货地址 JS 配置
- 发起 OAuth 授权:
|
生成 APP 支付配置
|
$config
为数组格式,你可以用 API 返回给客户端
二维码生成工具推荐
你也许需要生成二维码,那么以下这些供参考: