1、 进入官网
1)https://open.alipay.com/
2)登录
3)进入控制台(右上角)
4)点击“沙箱”(滑动到最下面,左边第一个就是了)
2、下载秘钥转换工具(开发者助手)
https://render.alipay.com/p/f/fd-jwq8nu2a/pages/home/index.html
3、生成密钥
注意,此时得到的应用私钥的格式是不对的,应用格式转换转换格式
4、通过3中的应用公钥得到支付宝公钥
5、封装一下相应信息得到alipay.js
const AlipaySdk = require("alipay-sdk").default;
const alipaySdk = new AlipaySdk({
appId: "2024353",
//签名算法
gateway: "https://openapi.alipaydev.com/gateway.do",
//支付宝公钥
alipayPublicKey:
"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoAFwizfYgdPrPgpQdLNeGLLwP1CQtxi4D9PM4RBgatz9K/8Mmt387vQDHN5hAB",
//应用私钥
privateKey:
"MIIEpAIBAAKCAQEAtML5jyueWwDqHjQ6qUgvQV+vHCfjdsPS14oJzRXZmShbep641okONl8Y68mqDKWVT7RVASMmFjFZ0SOe4BehU2uVlT0iYM+LYl/qWMS0xC8s2rvircJg==",
});
module.exports = alipaySdk;
6、接口
const alipaySdk=require('../database/alipay.js');//导入5中的js
const AlipayFormData=require('alipay-sdk/lib/form').default;//cnpm i alipay-sdk
//对接支付宝API
router.post("/api/payment", function (req, res, next) {
//订单信息
let orderId = req.body.orderId;
let price = req.body.price;
let name = req.body.name;
//对接支付宝API
const formData = new AlipayFormData();
//调用setMethod 并传入get,会返回可以跳转到支付页面的url,
formData.setMethod("get");
//支付时信息
const bizContent = {
out_trade_no: orderId,
product_code: "FAST_INSTANT_TRADE_PAY",
total_amount: price,
subject: name,
body: "商品详情",
};
formData.addField("bizContent", bizContent);
//支付成功或失败的链接
formData.addField("returnUrl", "http://localhost:8080/payment");
const result = alipaySdk.exec(
"alipay.trade.page.pay",
{},
{ formData: formData }
).catch(error => console.error('caught error!', error));
//对接成功,支付宝返回的数据
result.then((resp) => {
res.send({
data: {
code: 200,
success: true,
msg: "支付中",
paymentUrl: resp,
},
});
});
});
7、用无痕模式请求接口
8、结果
9、跳转返回地址paymentUrl
登录用沙箱的买家账户就行了
错误
1、
[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)支付宝公钥/应用私钥等信息错了
2、沙箱测试地址502
(ノ`Д)ノ不知道在哪里看到的这个沙箱周日12-周一12点维护中不能使用。可能是这个原因或者其它支付宝服务器的问题吧。
3、沙箱测试地址:系统有点忙~一会儿再试
还是这个沙箱的问题,隔亿会儿再来试试