申请红包发放
相关内容:
调用该接口时需要携带订单号,所以必须先调用 申请订单号 。
关于发放红包的限制条件,请参阅 发放红包 。
接口地址
请求方式 | 地址 |
---|---|
POST | https://api.kuaiyugo.com/api/payment/v1/programs/:programId/transfers/withdraw |
参数说明
以下各字段均为必填:
字段 | 类型 | 说明 | 位置 |
---|---|---|---|
programId | string | 星汉下发的小程序programId | params |
order_no | string | 通过申请订单号接口获取的订单号 | body |
open_id | string | 用户openid | body |
amount | number | 订单金额,单位为分的整数,满足≥30且≤20000 | body |
timestamp | number | 秒级时间戳,整数 | body |
nonce_str | string | 最长32位的随机字符串,用于签名的计算 | body |
signature | string | 签名,具体算法在下文详述 | body |
Header
以下各字段均为必填:
字段 | 类型 | 说明 | 位置 |
---|---|---|---|
jwt | string | 星汉平台jwt校验 | header |
miniprogram | string | 小程序appid | header |
返回格式
{
"err": 0,
"data": {
"result_code": "SUCCESS",
"reasons": ""
},
"msg": "请求成功"
}
返回值说明
字段 | 类型 | 说明 |
---|---|---|
err | number | 错误码,非0即有错误 |
msg | string | 提示信息 |
data | object | 返回数据 |
data.result_code | string | 提现结果,success / fail |
data.reasons | string | 微信或星汉返回的失败提示,其中星汉的失败提示见下文异常说明 |
异常说明
错误码 | 状态码 | 提示文本 | 说明 |
---|---|---|---|
1330 | 200 | 订单号不存在或者已失效 | 同一个用户在5秒内只能申请一次订单号 |
1331 | 200 | 应用未授权 | 该应用没有提现资格,需联系商务对接人开启权限 |
1335 | 200 | 用户当天提现次数或者总额超出上限 | 用户每天提现的次数和总额有限制 |
1336 | 200 | 应用当天提现次数或者总额超出上限 | 应用每天提现的次数和总额有限制 |
1337 | 200 | ip不在授信范围内 | 需联系商务对接人添加ip白名单 |
1338 | 200 | 应用账户余额不足 | |
1339 | 200 | 签名错误 | |
1341 | 200 | 无法将订单更新为 付款中 | |
1342 | 200 | 无法将订单更新为 成功 | |
1343 | 200 | 无法将订单更新为 失败 | |
1344 | 200 | 订单金额错误 | 订单金额超出最大值或少于最小值 |
1345 | 200 | 无法找到应用密钥 | 请联系商务对接组配置 |
签名
/**
* 签名算法
* @param {Object} signatureData 包含字段:open_id、order_no、amount、timestamp 和 nonce_str
* @param {String} transactionKey 由星汉平台提供的交易 Key(Transaction Key),请联系对接负责人获取 Key
* @return {String} 签名
*/
function sign (signatureData, transactionKey) {
// 字段要务必!务必!务必!按照字典升序排序!!!
let signatureStr = Object.keys(signatureData).filter(function(key){
return signatureData[key] !== undefined && signatureData[key] !== '';
}).sort().map(function(key){
return key + '=' + signatureData[key];
}).join('&');
signatureStr += transactionKey;
// 使用 MD5 加密
return crypto.createHash("md5").update(signatureStr).digest("hex");
},