*一. 申请开发??

访问开发者中心https://openhome.alipay.com/platform/appDaily.htm?tab=info

进行认证后(真实姓名,绑定手机号和邮箱), 即可进入沙箱配置页

a43f57e84f55a6f0a29727736934b9a6.png

二. 配置密钥

1. 下载密钥生成工具

访问 https://docs.open.alipay.com/291/105971

1f8481f58db077b46c576d3f9e2f332c.png

下载AlipayDevelopmentAssistant-1.0.7.exe (支付宝开发平台开发助手)密钥工具 大约100多M 正常安装

2.使用工具生成公钥私钥

c6f845df84f5cbcac6dce6cb485cb38b.png

3.设置公钥

加签方式选择公钥

51e1ae5878ebc514b824d38f660fa219.png

保存公钥,退款需要用到

三. NodeJS请求支付接口(koa)

1.保存私钥

新建app_private_key.pem文件

84b01a06d3bab3d55e11b7776901ce77.png

2.实现代码

支付参数

https://opendocs.alipay.com/apis/api_1/alipay.trade.page.pay

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
const moment = require('moment')
const { nginx } = MAPP.proConfig
const crypto = require('crypto')
const { app_private_key } = MAPP.keys// 支付宝私钥
module.exports = {
get: {
// 创建支付宝支付连接
'/test/alipay': [
async ctx => {
// 支付参数
// 注意:本地测试回调需要配置ngrok
const paramsMap = {
app_id: '2021xxxxxxxx', // 应用id
method: 'alipay.trade.page.pay', // 调起类型(app,page,wap)(包括app,h5,PC页面支付)
format: 'JSON',
charset: 'utf-8',
sign_type: 'RSA2',
timestamp: moment().format('YYYY-MM-DD HH:mm:ss'),
version: '1.0',
notify_url: `https://${nginx.server_name}/api-universal/test/aliay/callback`, // 接口回调(配置ngrok映射https地址)
// return_url: 'https://b2c-app-dev.fenxiangqu.cn/pages/my/index',// 前台跳转页面
biz_content: JSON.stringify({
product_code: 'FAST_INSTANT_TRADE_PAY', // 商品码
body: '订单回调内容', // 订单附加信息。
subject: '测试支付宝PC支付', // 交易标题
out_trade_no: 'xxxxxxxxx', // 订单编号
total_amount: 0.01 // 支付金额
}) // 订单支付参数
}
// 拼接参数
let objParams = Object.keys(paramsMap)
.sort()
.map(key => {
return key + '=' + paramsMap[key]
})
.join('&')
let encodeParams = Object.keys(paramsMap)
.sort()
.map(key => {
return key + '=' + encodeURIComponent(paramsMap[key])
})
.join('&')
// RSA2加密签名
let sign
let signInit = crypto.createSign('RSA-SHA256')
signInit.update(objParams, 'utf8')
// 支付宝私钥签名
// console.log(app_private_key)
sign = signInit.sign(app_private_key, 'base64')
let params = encodeParams + '&sign=' + encodeURIComponent(sign)
// https://openapi.alipaydev.com/gateway.do 沙漏环境
// https://openapi.alipay.com/gateway.do 正式环境
const url = `https://openapi.alipaydev.com/gateway.do?${params}`
ctx.info({ message: '创建支付参数成功', data: { url } })
},
{
userAuth: false,
},
]
},
post: {
// 支付宝回调
'/test/alipay/callback': [async ctx => { },
{
userAuth: false,
}
]
}
}

3.支付信息链接

409fe8b92de6a90b63cef300de9b23c3.png

4.支付界面

 前台支付界面 https://opendocs.alipay.com/open/270/01arn8

0d1453f969811cbc5c3e46dcd98e642d.png

5.生成二维码

api说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
  // 创建当面二维码支付
'/test/alipay/qr': [
async ctx => {
const paramsMap = {
app_id: 'xxxxxx信', // 应用id
method: 'alipay.trade.precreate', //请求方式名称
// method: 'alipay.trade.create',
format: 'JSON',
charset: 'utf-8',
sign_type: 'RSA2',
timestamp: moment().format('YYYY-MM-DD HH:mm:ss'),
version: '1.0',
notify_url: `https://${nginx.server_name}/api-universal/test/aliay/callback`, // 接口回调(配置ngrok映射https地址)
// app_cert_sn: app_private_key, // 秘钥
// alipay_root_cert_sn: app_public_key, // 公钥
biz_content: JSON.stringify({
subject: '支付宝二维码支付', // 交易标题
out_trade_no: '1624678209672759', // 订单编号
total_amount: 0.01 // 支付金额
})
}
// 拼接参数
let objParams = Object.keys(paramsMap)
.sort()
.map(key => {
return key + '=' + paramsMap[key]
})
.join('&')
// RSA2加密签名
let sign
let signInit = crypto.createSign('RSA-SHA256')
signInit.update(objParams, 'utf8')
// 支付宝私钥签名
// console.log(app_private_key)
sign = signInit.sign(app_private_key, 'base64')
const gateway = 'https://openapi.alipaydev.com'
// const url = `${gateway}/gateway.do?${params}`
paramsMap.sign = sign
// 对接支付宝接口,生成地址
const server = MAPP.creatServer(gateway)
const response = await server.get('/gateway.do', { params: paramsMap })
console.log(response.data) //返回信息
// {
// alipay_trade_precreate_response: {
// code: '10000',
// msg: 'Success',
// out_trade_no: 'xxxxxx',
// qr_code: 'https://qr.alipay.com/bax05172lthykirrqxus00f5' // 地址要用工具生成二维码扫描
// },
// sign: ''
// }
},
{
userAuth: false,
}
]
},

注意:

显示:码已失效,请刷新二维码后重试

解决办法: 就是使用沙箱版本的支付宝APP扫描或者使用沙箱版本的支付宝账号密码登录付款即可。

打开开放平台, 沙箱工具中下载沙漏版钱包

https://open.alipay.com/platform/appDaily.htm?tab=tool