彩虹易支付
彩虹易支付 SDK
,仅需一行代码即可向任何 彩虹易支付系统平台
发起支付请求,例如对接该彩虹易支付平台:https://pay.v8jisu.cn/?invite=Q24GfEo。
发起支付
语法
- url 彩虹易支付平台接口地址
- pid 彩虹易支付平台商户 ID
- key 彩虹易支付平台商户密钥
- type 支付类型(如:wxpay、alipay)
- out_trade_no 商户订单号
- notify_url 支付结果通知地址(可指向云函数地址)
- return_url 支付结果跳转地址(支付成功后跳转展示的页面)
- name 商品名称
- money 商品价格
- param 附加参数(支付成功后原样返回,没有可使用 null 代替,注意该参数为字符串类型)
js
function main() {
const url = epay.create(
url,
pid,
key,
type,
out_trade_no,
notify_url,
return_url,
name,
money,
param,
)
}
订单创建成功后该函数返回 url
支付链接,用户点击链接即可跳转到支付页面(可使用云函数 重定向
至该页面供用户支付)。
代码示例
js
function main() {
const url = 'https://pay.v8jisu.cn/' // 支付接口地址
const pid = 1001 // 商户ID
const key = 'C6An86nk***************m5LU01PON' // 商户密钥
const name = '测试商品' // 商品名称
const money = 1.0 // 商品金额
/*** 生成不重复的订单号 Start ***/
const timestamp = new Date().getTime() // 获取当前时间戳
const randomDigits = Math.floor(Math.random() * 1000000)
.toString()
.padStart(6, '0') // 生成6位随机数字
const out_trade_no = `${timestamp}${randomDigits}` // 订单号(不能重复)
/*** 生成不重复的订单号 End ***/
const pay_url = epay.create(
url,
pid,
key,
'alipay',
out_trade_no,
'https://api.t1y.net/1001/epay_notify', // 请指向你的异步通知云函数地址,见下文
'https://baidu.com/',
name,
money,
null,
)
ctx.redirect(302, pay_url) // 重定向至付款地址供用户付款
}
将以上代码粘贴到云函数中,若参数没有问题,访问云函数即可显示彩虹易支付付款页面。
异步通知
当用户付款成功后,彩虹易支付服务器会向异步通知地址发送一个 GET
请求,该请求中包含订单号、金额、签名等信息。我们需要使用 epay.notifySignVerify()
方法验证当前请求是不是彩虹易支付官方服务器发送出来的,确保支付安全。
语法
- key 彩虹易支付平台商户密钥
js
epay.notifySignVerify(key)
该方法返回一个 boolean 值,表示当前请求是不是彩虹易支付官方服务器发送出来的,该方法的结果是可信的。
代码示例
js
function main() {
const trade_status = ctx.query('trade_status') // 获取 GET 请求中的支付状态
console.log(trade_status)
if (!epay.notifySignVerify('C6An86nk***************m5LU01PON')) {
// 验证签名是不是彩虹易支付服务器发出的,只有验证成功才执行业务逻辑(可能存在有人伪冒彩虹易支付服务器发送请求,签名验证是必须的,确保安全)
console.log('签名验证失败')
return 'fail'
}
console.log('签名验证成功')
if (trade_status == 'TRADE_SUCCESS') {
// 判断是否付款成功
// 付款成功,在这里编写业务逻辑,例如:修改数据库中的用户余额,为用户增加余额
console.log('付款成功')
return 'success'
}
console.log('付款失败')
return 'fail'
}
异步通知云函数中,必需返回 fail
或 success
字符串,否则彩虹易支付服务器会一直发送请求(处理成功返回 success,反之返回 fail 即可)。
实战说明
在创建订单时应当在数据库中创建相应的订单以及相应的操作数据,当用户付款成功时,应当判断当前订单有没有处理完成,避免二次充值,并修改订单状态。
举例
例如创建订单时,在数据库中创建订单,订单中应当包含订单号、金额、用户 ID、订单状态等信息。当用户付款成功判断订单状态是否为未处理,如果为未处理,则修改订单状态为已处理,并修改用户余额。