最近想對接對接支付寶接口, 支付寶接口可以使用沙箱測試
代碼地址: https://github.com/klren0312/NodeAlipayTest
一. 開啟沙箱
可以訪問開發者中心https://openhome.alipay.com/platform/appDaily.htm?tab=info
進行認證后, 即可進入沙箱配置頁
image.png
二. 配置密鑰
1. 下載密鑰生成工具
訪問 https://docs.open.alipay.com/291/105971
image.png
2.生成公鑰私鑰
image.png
3.設置公鑰
加簽方式選擇公鑰
image.png
注意: 由于我年輕的時候失誤, 選了RSA2選成了證書, 沒法對接node, 所以我代碼只能用RSA來進行, 不過截圖可以用別人的
image.png
輸入公鑰后, 會生成一個支付寶公鑰, 后面代碼需要使用
image.png
三. NodeJS請求支付接口
1. 初始化項目
mkdir payTest
yarn init -y
2. 安裝依賴
官方提供了NodeJS的服務端SDK
前往https://docs.open.alipay.com/54/103419查看
yarn add alipay-sdk
3.查看要用到的接口
由于我們用的是PC支付, 對應的文檔中提示我們可以使用alipay.trade.page.pay
接口來實現
alipay.trade.page.pay
接口的必填參數如下,
4.代碼編寫
const AlipaySdk = require('alipay-sdk').default
const AlipayFormData = require('alipay-sdk/lib/form').default
// 初始化插件
const alipaySdk = new AlipaySdk({
appId: '2016100100639372',
gateway: 'https://openapi.alipaydev.com/gateway.do',
signType: 'RSA', // 注意這里默認是RSA2, 但是我自己只能用RSA, 所以是RSA, 正常不要配置
privateKey: '剛剛你使用工具生成的私鑰',
alipayPublicKey: '剛剛你使用公鑰在沙箱頁面生成的支付寶公鑰'
})
async function pay () {
const formData = new AlipayFormData()
// 調用 setMethod 并傳入 get,會返回可以跳轉到支付頁面的 url
formData.setMethod('get')
// 配置回調接口
formData.addField('notifyUrl', 'http://www.zzes1314.cn')
// 設置參數
formData.addField('bizContent', {
outTradeNo: '1582976759798',
productCode: 'FAST_INSTANT_TRADE_PAY',
totalAmount: '0.01',
subject: '商品',
body: '商品詳情',
});
// 請求接口
const result = await alipaySdk.exec(
'alipay.trade.page.pay',
{},
{ formData: formData },
);
// result 為可以跳轉到支付鏈接的 url
console.log(result);
}
pay()
5. 運行結果
可以看到命令行打印了返回的跳轉鏈接
image.png
訪問可以看到沙箱的支付環境
image.png
這是使用沙箱的賬號登錄支付即可
image.png
image.png
四. 一些小問題
當我們配置好公鑰的時候可以來檢驗下是否可以正常驗簽
image.png
這里可以通過它提示下載簽名工具, 但是由于簽名工具是用java語言開發,所以工具的左邊文本框要輸入PKCS8格式的私鑰文本信息。
如果您使用非java開發語言,請先將生成的私鑰轉換成PKCS8格式的私鑰,再將PKCS8格式的私鑰文本信息輸入工具左邊輸入框。
所以我們要把私鑰在支付寶開放平臺助手
里進行轉換后再進行簽名
image.png
然后復制生成的私鑰進行簽名
image.png
最后放入驗證, 通過既是可以了