npm install china-pay
前端
生成私鑰 設置私鑰 將上面生成的私鑰生成無密碼的私鑰node
const privatePem = fs.readFileSync('private_key.pem');//該私鑰爲無密碼的私鑰
const publicPem = fs.readFileSync('public_key.pem');
const alipayJson = {
app_id: '', //應用ID
notify_url: '',//通知地址
};
const key = {
privateKey: privatePem,//私鑰,格式爲buffer
publicKey: publicPem//公鑰, 格式爲buffer
}
const pay = require('china-pay')('alipay');
//alipayJson, key 必傳
const alipay = new pay(alipayJson, key)
複製代碼
let biz_content = {
out_trade_no: '訂單號',
total_amount: '金額',
subject: '訂單標題',
body: "商品描述"
}
try{
//result爲移動端須要給支付寶的數據
let result = await alipay.getAppParam(biz_content)
}catch(err){
//err
}
複製代碼
try{
//obj 爲支付寶返回的body對象裏面的內容
let result = await alipay.verifySign(obj)
//res.send("success");若是成功
}catch(err){
//認證失敗
}
複製代碼
try{
await alipay.refundTransfer({
out_biz_no :'12124324234',//提現訂單
payee_account:'130*',//支付寶帳號
amount :'0.01',//提款金額
payee_real_name :'董佳',//支付寶帳號對應的真實姓名
payer_show_name :'欣享車'//支付人的姓名
});
}catch(err){
//失敗
}
複製代碼
const wxpayJson = {
appid: '', //郵箱裏
mch_id: '',//郵箱裏
notify_url: //郵箱裏
};
const key = {
key:'',//郵箱裏
}
const pay = require('china-pay')('wxpay');
//alipayJson, key 必傳
const wxpay = new pay(wxpayJson, key)
複製代碼
let obj = {
attach: '12313231',//附加數據(有時候必填)
body: '測試',
out_trade_no: '12312324143',
total_fee: "1"//(支付費用(分))
}
try{
//前端須要的數據
let result = await wxpay.appUnifiedorder(obj);
}catch(err){
console.log(err)
}
複製代碼
let obj = {
attach: '12313231',//附加數據(有時候必填)
body: '測試',
out_trade_no: '12312324143',
total_fee: "1"//(支付費用(分))
}
try{
//支付的url碼, 該碼能夠轉爲二維碼
let result = await wxpay.webUnifiedorder(obj);
}catch(err){
console.log(err)
}
複製代碼
注: 微信返回的格式是xml格式, 所以先對其進行轉換, express能夠使用express-xml-bodyparser
中間件處理python
//obj 裏面的 key 能夠是數組或者字符串
let obj = {
appid: [ 'wx7c73ca24*******' ],
attach: [ '1231323123' ],
......
}
//失敗則拋出異常,
try{
let result = await wxpay.notify(obj)
}catch(err){
//
}
//以後須要給wx返回, 返回的參數爲「SUCCESS」
// res.set('Content-Type', 'text/xml');
// res.send("SUCCESS")
複製代碼
priv.pfx
結尾的證書後const pem = require('pem');
const fs = require('fs');
const pfx = fs.readFileSync("/home/dj/priv.pfx");
pem.readPkcs12(pfx, { p12Password: "password" }, (err, cert) => {
//cert.key就是私鑰
console.log(cert.key)
});
複製代碼
wopenssl = require('wopenssl');
var p12 = wopenssl.pkcs12.extract(__dirname + '/priv.pfx', '761202');
var certs = wopenssl.x509.parseCert(p12.certificate);
//certs裏面的Serial就是certId, 可是是16進制的, 而後使用python int("1149699808", 16)將其轉換爲10進制
複製代碼
openssl pkcs12 -in input.pfx -out mycerts.crt -nokeys -clcerts 將pfx或p12 生成證書。web
openssl pkcs12 -in x.pfx -nocerts -nodes -passin pass:123456 | openssl rsa -out privkey.pem pfx生成rsa 私鑰express
openssl x509 -inform der -in certificate.cer -pubkey -noout > certificate_publickey.pem cer生成公鑰(證書有兩種格式, 一種是der, 一種是pem。 der是二進制, 而pem是字符串, 能夠使用文本編輯器打開看)npm
const key = {
privateKey:fs.readFileSync('/home/dj/privkey.pem'),
publicKey:fs.readFileSync('/home/dj/pub.pem')
}
const unionpayJson = {
merId: "8986101739906**",
frontUrl: "http://papanda.tk:3100",
certId: "742461010**"
};
const pay = require('china-pay')('unionpay');
//unionpayJson key 必傳
const unionpay = new pay(unionpayJson, key)
複製代碼
let obj = {
orderId :'211323213241234321412',
txnAmt :'1',//(分)
orderDesc :'這是一個測試'
}
try{
//result 爲tn 前端用來跟銀聯交互的數據
let result = await unionpay.getTn(obj);
}catch(err){
console.log(err)
}
複製代碼
try{
//有result則成功
let result = await unionPay.notify(req.body);
}catch(err){
}
//給銀聯的返回
//res.send('success')
複製代碼