# JSAPI 网页支付
# 说明
- 支持微信、支付宝
- 指微信公众号支付,支付宝的服务窗或生活号支付
- 微信则先通过 获取 openid (opens new window) 接口获得用户 openid
- 支付宝则先通过 获取 buyerid (opens new window) 接口获得用户 buyer_id
- 然后请求 jsapi 接口,获得支付参数,在网页用 WeixinJSBridge 代码调起支付(微信)
- 然后请求 jsapi 接口,获得支付参数,在网页用 AlipayJSBridge 代码调起支付(支付宝)
# 接口地址
https://open.weidoufu.com/pay/jsapi (opens new window)
请求方式:POST
# 接口参数
字段名称 | 字段类型 | 必填参数 | 说明 (AccessKey/SecretKey)应用密钥 |
---|---|---|---|
access_key | string(32) | 是 | 应用密钥的 AK,即是 AccessKey |
body | string(32) | 是 | 商品名称 例如:QQ 会员充值 |
out_order_no | string(32) | 是 | 商户订单号(字母、数字,至少 18 位长度) |
pay_type | int(2) | 是 | 支付类型 1-微信;2-支付宝;3-云闪付 |
total_fee | int(9) | 是 | 价格单位:分 |
openid | string(32) | 选 | 微信必传,微信 openid,具体获取方法点击查看 (opens new window) |
buyer_id | string(32) | 选 | 支付宝必传,支付宝 buyer_id,具体获取方法点击查看 (opens new window) |
notify_url | string(128) | 是 | 你平台的回调地址 例如:http://www.your.com/notify_url |
attach | string(128) | 否 | 附加信息,回调时原样传回 例如:{test:'test1_params'} |
ledger | string(512) | 否 | 分账接收方,jsonArray 格式 例如:'[{"amount":1,"sub_mch_no":"xxxxxxxx"}]' |
sign | string | 是 | 签名结果(大写),详见 签名算法 (opens new window) |
特殊说明:pay_type 为 1 时,openid
必传;pay_type 为 2 时,buyer_id
必传;
openid(微信) 和 buyer_id(支付宝) 二选一
# 返回参数(微信)
返回为 json 格式
名称 | 字段类型 | 必有 | 说明 |
---|---|---|---|
code | int | 是 | 1:成功 0:失败 |
message | string | 是 | 返回描述信息 |
mch_trade_no | string | 是 | 平台返回的订单号 |
out_order_no | string | 是 | 商户订单号(字母、数字) |
app_id | string | 否 | jsapi 支付参数 |
timestamp | string | 否 | jsapi 支付参数 |
nonce_str | string | 否 | jsapi 支付参数 |
package | string | 否 | jsapi 支付参数 |
sign_type | string | 否 | jsapi 支付参数 |
pay_sign | string | 否 | jsapi 支付参数 |
成功返回:
{
code: 1,
message: "成功",
data: {
mch_trade_no: '202105135513716648486662',
out_order_no: '180901620895069445',
jsapi: {
app_id: 'wx369ab4160391bvbgg',
timestamp: '1620895076',
nonce_str: '82aafec92844bd7b7575e5d642911ac9',
package: 'prepay_id=wx1316375652779615245693f173dedb0000',
sign_type: 'MD5',
pay_sign: 'E1BDB03ECDC44F48CE1D4D353819318A'
}
}
}
# 返回参数(支付宝)
返回为 json 格式
名称 | 字段类型 | 必有 | 说明 |
---|---|---|---|
code | int(1) | 是 | 1:成功 0:失败 |
message | string | 是 | 返回描述信息 |
mch_trade_no | string | 是 | 平台返回的订单号 |
out_order_no | string | 是 | 商户订单号(字母、数字) |
trade_no | string | 否 | jsapi 支付参数 |
成功返回:
{
code: 1,
message: "成功",
data: {
mch_trade_no: '202105135513716648486662',
out_order_no: '180901620895069445',
jsapi: {
trade_no: '20211127220461494775747063371',
}
}
}
失败返回:
{
code: 0,
message: "签名错误",
data: {
mch_trade_no: '202105135513716100622151',
out_order_no: '1809016208199613140',
jsapi: ''
}
}
# H5 demo(微信)
前端页面根据返回赋值调起支付 JS
function onBridgeReady(payData) {
WeixinJSBridge.invoke(
"getBrandWCPayRequest",
{
appId: payData.app_id, //公众号名称,由商户传入
timeStamp: payData.timestamp, //时间戳,自1970年以来的秒数
nonceStr: payData.nonce_str, //随机串
package: payData.package,
signType: payData.sign_type, //微信签名方式
paySign: payData.pay_sign, //微信签名
},
function (res) {
// 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg 将在用户支付成功后返回 ok,但并不保证它绝对可靠。
if (res.err_msg == "get_brand_wcpay_request:ok") {
// 现在已经不能在这里定义跳转,具体跳转请看下面
}
}
);
}
if (typeof WeixinJSBridge === "undefined") {
if (document.addEventListener) {
document.addEventListener("WeixinJSBridgeReady", onBridgeReady, false);
} else if (document.attachEvent) {
document.attachEvent("WeixinJSBridgeReady", onBridgeReady);
document.attachEvent("onWeixinJSBridgeReady", onBridgeReady);
}
} else {
onBridgeReady();
}
# 付款完成后跳转
请到管理后台自定义跳转地址,没设置的,默认付款完后灰自动关闭窗口
后台设置链接:https://console.weidoufu.com/merchant/jump (opens new window)
# 支付跳转示例:
填写的跳转链接
https://pay.baidu.com/wx/success
则付款完成后,将要跳转页面链接如下
https://pay.baidu.com/wx/success/?mch_trade_no=202003013506162516&out_order_no=T138446641210111
即系提供两个参数供后续操作(可做支付完成后页面展示等)
# 平台订单号
mch_trade_no
# 你的订单号
out_order_no
# 示例下载
最后更新于: 1/11/2024, 10:57:30 PM