1、前期工作准备
1、登录支付宝沙箱:这些APPID、加签、支付宝网关地址信息下面要填充自己的
2、秘钥工具的下载:
3、在秘钥工具中生成秘钥:注意签名算法就是加密算法=RSA2
1.png
4、复制秘钥工具中生成的应用公钥
2.png
5、将复制的应用公钥粘贴到支付宝沙箱应用中:点击自定义秘钥>点击查看>粘贴应用公钥>确认
4.png
5.png
6、将秘钥工具中生成的应用秘钥内容转换为 PKCS8 或 PKCS1 格式
7.png
2、引入alipay-sdk
1、安装:npm install alipay-sdk -S
2、定义一个alipay.js文件,在里面填上自己的appid、签名算法、支付宝网关、支付宝公钥、应用私钥等。
//alipay.js
const AlipaySdk = require('alipay-sdk').default;
const alipaySdk = new AlipaySdk({
// appid
appId: '',
//签名算法
signType:'',
//支付宝网关
gateway:'',
//支付宝公钥
alipayPublicKey:'',
//应用私钥
privateKey:''
});
module.exports = alipaySdk;
2、在Node.js后端的应用
//引入支付宝沙箱配置
const alipaySdk = require('../db/alipay.js');
const AlipayFormData = require('alipay-sdk/lib/form').default;
//支付接口
router.post('/api/payment', function(req, res, next) {
//接收前端给后端的订单号
let orderId = req.body.orderId;
//前端给后端总价
let price=req.body.price
//前端给后端商品名称
let name=req.body.name.join('')
const formData = new AlipayFormData();
//调用get方法
formData.setMethod('get'),
//支付时 的信息
formData.addField('bizContent', {
outTradeNo: orderId,//订单号
productCode: 'FAST_INSTANT_TRADE_PAY',//写死的
totalAmount: price,//金额
subject: name//商品名称
});
//支付成功或者失败打开的页面
formData.addField('returnUrl', 'http://localhost:8080/payment');
const result = alipaySdk.exec(
'alipay.trade.page.pay',
{},
{ formData: formData },
);
result.then(resp=>{
res.send({
data:{
code:200,
success:true,
paymentUrl:resp
}
})
})
})
3、前端发起的请求:
goPayment(){
$http.request({
url:"/payment",
method:"POST",
header:{
token:true
},
data : {
orderId:this.orderNumber,
price:this.details.price,
name:this.details.list
}
}).then((res)=>{
// #ifdef APP-PLUS
plus.runtime.openURL( res.paymentUrl );
// #endif
// #ifdef H5
window.location.href=res.paymentUrl
// #endif
})
}
4、进行支付
点击你的支付入口,跳转到支付页面,这里可以用到沙箱账号进行支付,里面的钱是虚拟的。
(1)填写账号和登录密码
11.png
(2)填写支付密码
12.png
(3)支付成功
13.png
可能遇到问题
[Warning] page interface through formdata is deprecated. Use sdk.pageExec instead
caught error! Error: error:0D0680A8:asn1 encoding routines:asn1_check_tlen:wrong tag。
1)应用私钥没有转换格式(在秘钥工具中有格式转换功能)
2)支付宝公钥/应用私钥等信息错了
网友评论