支付成功异步通知接口
用户支付成功后,平台会发送异步通知到订单携带的notify_url(如果有该参数的话),请求方式为 POST
请求参数:
字段名称 | 字段类型 | 必填参数 | 说明 |
---|---|---|---|
return_code | int(1) | Y | 1:支付成功 |
total_fee | int(16) | Y | 金额。单位:分 |
out_trade_no | string(32) | Y | 用户端自主生成的订单号 |
payjs_order_id | string(32) | Y | PAYJS 订单号 |
transaction_id | string(32) | Y | 微信用户手机显示订单号 |
time_end | string(32) | Y | 支付成功时间 |
openid | string(32) | Y | 用户OPENID标示,本参数没有实际意义,旨在方便用户端区分不同用户 |
attach | string(127) | N | 用户自定义数据 |
mchid | string(16) | Y | PAYJS 商户号 |
type | string(16) | N | 支付类型。微信订单不返回该字段;支付宝订单返回:alipay |
sign | string(32) | Y | 数据签名 详见签名算法 |
提示:
- 接收通知的服务器请在3秒钟内响应(http状态码200则标记通知成功,其它状态码则标记通知失败,推送结束)
- 为保障推送到达率,系统可能多次进行通知推送,请做好去重逻辑
- 推送可能增加参数,请做好冗余处理,勿使用 hard code
- 商户系统对于支付结果通知的内容一定要验签,并校验返回的订单金额是否与商户侧的订单金额一致
- 通知频率(秒):0,15,30,180,1800,3600。超过1小时后如需推送,可以在后台手动补发
- 异步通知过程中,如果该订单接收到check接口的成功查询,则异步通知在执行完当前任务后终止,不再继续通知
特别提醒:接收异步通知的服务器需在大陆境内备案服务器
接收回调流程示例:
<?php
$data = $_POST;
if($data['return_code'] == 1){
// 1.验签逻辑
// 2.验重逻辑
// 3.自身业务逻辑
// 4.返回 success 字符串(http状态码为200)
echo 'success';
}
?>
php
<?php
$data = $_POST;
if($data['return_code'] == 1){
// 1.验签逻辑
// 2.验重逻辑
// 3.自身业务逻辑
// 4.返回 success 字符串(http状态码为200)
echo 'success';
}
?>
python
# 以flask为例
from flask import Flask
from flask import request
import logging
app = Flask(__name__)
app.logger.setLevel(logging.DEBUG)
@app.route('/api[您的接口]/',methods=['GET','POST'])
def api():
if request.method == 'POST':
data = request.form
if data.get('return_code') == '1':
# 1.验签逻辑
# 2.验重逻辑
# 3.自身业务逻辑
# 4.返回 success 字符串(http状态码为200)
return 'success!'
return 'fail!'
if __name__ == '__main__':
app.run()