小程序支付
小程序支付
前提条件
商户申请小程序或使用渠道小程序
接口地址
http://xipay.xiangma365.com/api/openpay/v3/minipay
请求方式
POST
请求头部
Content-Type:application/json
请求参数
参数 | 类型 | 必填 | 描述 | 示例 |
---|---|---|---|---|
inst_no | string | Y | 机构号 ,通道分配 | 60000001 |
mch_no | string | Y | 商户号 | Y52212200002 |
pay_type | string | Y | 支付类型:300 支付宝,400 微信,600 云闪付 | 400 |
pay_trace_no | string | Y | 请求流水号(在商户系统内唯一) | werddtuoji0988 |
pay_time | string | Y | 支付请求时间,yyyyMMddHHmmss格式 | 20880907150901 |
total_amount | string | Y | 支付金额,单位:分 | 1 |
open_id | string | N | 用户标识:微信openid/支付宝userid | orxYXv8u8H4i2K0uB6RVXZ |
appid | string | 微信小程序的appid(此处取值优先于后台配置) | wxbca6c935a45dcdc5 | |
notify_url | string | N | 回调地址(无须ecode) | http://open.sh.com |
sign | string | Y | 签名字符串 | 920ff5b412adb411c6648948f2212fb9 |
请求示例(微信)
{
"inst_no": 60000001,
"mch_no": "Y52212190001",
"pay_type": "400",
"pay_trace_no": "998877665544332001",
"pay_time": "20230227231190",
"total_amount": "1",
"open_id": "1",
"appid": "1",
"sign": "ca80a3969b049138cbd27970c8d4639d"
}
请求示例(支付宝)
响应参数
参数 | 类型 | 必填 | 描述 | 示例 |
---|---|---|---|---|
return_code | string | Y | 响应码:SUCCESS成功,FAIL失败,响应码仅代表通信或参数 | SUCCESS |
result_code | string | Y | 业务结果:PAY_SUCCESS 支付成功 ,PAY_IN_PROCESS 支付中 ,PAY_FAIL 支付失败,只有在return_code为SUCCESS时才会返回。 | PAY_SUCCESS |
return_msg | string | Y | 返回信息提示,“支付成功”,“支付中”,“参数不合法” 等 | 支付成功 |
pay_type | string | Y | 支付类型:300支付宝,400微信,600云闪付 | 300 |
mch_name | string | Y | 商户名称 | 小猫生活 |
shop_name | string | 门店名称 | 小猫生活 | |
mch_no | string | Y | 商户号 | 851811130002 |
shop_no | string | 门店号 | 86000033007 | |
pay_trace_no | string | Y | 请求流水号(必须在商户系统内唯一) | 51c7d68424e5492199cf7f4734a2b977 |
pay_time | string | Y | 请求交易时间,格式yyyyMMddHHmmss | 20181116155621 |
total_amount | string | Y | 支付金额,单位:分 | 100 |
trade_no | string | Y | 订单号 | 20000002814118090716435200001 |
appId | object | 微信公众号支付返回字段,公众号appId | appIdXXX | |
timeStamp | object | 微信公众号支付返回字段,时间戳,部分系统取到的值为毫秒级,需要转换成秒(10位数字) | 1414561699 | |
nonceStr | object | 微信公众号支付返回字段,随机字符串 | 1234 | |
packages | object | 微信公众号支付返回字段,支付参数 | prepay_id=123456789 | |
signType | object | 微信公众号支付返回字段,签名方式 | MD5,RSA | |
paySign | object | 微信公众号支付返回字段,签名 | ||
ali_trade_no | object | 支付宝JSAPI支付返回字段用于调起支付宝JSAPI | ||
attach | string | |||
code_url | string | 跳转到该地址即可发起支付,与原生参数不同时返回 | ||
sign | string | Y | 签名 | 336437c53711dd466154c4162cbe1c52 |
响应示例(微信)
响应示例(支付宝)
对接流程
1.通过授权获取用户 open_id
-
小程序端调用 wx.login(Object object)接口 [获取登录凭证(code)](https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.login.html "获取登录凭证(code)")
- 商户服务端使用第一步获取的code 换取 open_id ,后台调用接口 [获取openID](https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/user-login/code2Session.html "获取openID")
GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
商户也可以使用以下接口获取openid: 接口地址:http://xipay.xiangma365.com/api/openpay/jsapi/getminiopenid 请求方式 POST 请求头部 Content-Type:application/json 请求参数:
{'code':res.code,'appid':appid,'secret':secret,'mch_no':mch_no}
(其中参数appid/secret与mch_no二选择一,选择mch_no时使用渠道小程序获取openid)
示例如下:
wx.login({
provider: "weixin",
success: res => {
console.log('code=====',res.code);
//u商户小程序appid和secret
const appid = 'wx1cdb34ade5d35a4d'; // 微信小程序appid
const secret = '96f8a00c73fddddfbcdc9121b0806ff4'; // 微信小程序secret
//调用request请求api转换登录凭证
wx.request({
url: 'http://xipay.xiangma365.com/api/openpay/jsapi/getminiopenid',
data:{
'code':res.code,
'appid':appid,
'secret':secret
},
method:'POST',
header: {
'content-type': 'application/json'
},
success: function (result) {
if(result.statusCode === 200) {
console.log('openid=======',result.data.data);
// uni.setStorageSync('openid', result.data.openid);
// uni.setStorageSync('session_key', result.data.session_key);
}
}
})
}
})
2.商户服务端使用 open_id 下单
接口使用上述接口:小程序支付 请求参数
{
"inst_no": 60000001,
"mch_no": "Y52212190001",
"open_id": "oyf3m5sNmCpb4lkZc-iGG30CHztg",
"pay_type": "400",
"pay_trace_no": "998877665544332009",
"pay_time": "20230227231190",
"total_amount": "1",
"sign": "ac6e3889707135f9d244ab088fc3e75b"
}
3.小程序端发起支付
小程序端使用返回的参数发起支付 调用wx.requestPayment(OBJECT)发起微信支付
wx.requestPayment(
{
'timeStamp': '',
'nonceStr': '',
'package': '',
'signType': 'MD5',
'paySign': '',
'success':function(res){},
'fail':function(res){},
'complete':function(res){}
})