allinpay
v1.0.8
Published
Allinpay Node.js SDK 通联支付 Node.js SDK通联云账户t
Downloads
23
Readme
Allinpay Node.js SDK 通联支付 Node.js SDK
Install
npm install allinpay
Usage
const AllInPay = require('allinpay');
const GateWayPay = AllInPay.GatewayPay; // 网关支付
const AccountPay = AllInPay.AccountPay; // 账户支付
const Shouyinbao = AllInPay.Shouyinbao; // 收银宝(移动支付)
const Wanjiantong = AllInPay.Wanjiantong; // 万鉴通(银行卡要素验证)
网关支付
const allInPay = new GatewayPay(merchantId, md5Key, {
isTest: true, // 是否开启测试模式,默认false,测试模式下所有请求发至通联测试环境url
signType: 0 // 目前只支持0,使用md5签名、验签
});
// 以后的调用中都不需要传merchantId、signType、version参数
获取创建支付单所需form参数 getOnePayOrderParameters
let paymentFormData = allInPay.getOnePayOrderParameters(parameters);
// paymentFormData.fields = [] // form 的字段,按顺序放到表单
// paymentFormData.values = [] // form 的值
// paymentFormData.postUrl = '' // form post 到的url
获取一个订单信息 getOnePayOrder
// Note: 此接口只返回已支付成功的订单
let payOrder = await allInPay.getOnePayOrder(data);
/**
返回:
{ credentialsType: '',
payAmount: '1200000',
extTL: '',
payDatetime: '20180314155026',
signType: '0',
returnDatetime: '20180329171728',
credentialsNo: '',
paymentOrderId: '201803141550202205',
pan: '',
version: 'v1.0',
issuerId: '',
orderNo: '20180314200130',
payResult: '1',
ext1: '附加参数',
ext2: '附加参数2',
orderAmount: '1200000',
signMsg: 'B362885C7A780944B28C5D830A0AA81F',
txOrgId: '',
errorCode: '',
userName: '',
payType: '0',
merchantId: '100020091218001',
language: '1',
orderDatetime: '20180314150122' }
**/
单笔订单退款 refundOnePayOrder
let refundResult = await allInPay.refundOnePayOrder(data);
/**
返回:
{ merchantId: '100020091218001',
version: 'v2.3',
signType: '0',
orderNo: '20180314200130',
orderAmount: '1200000',
orderDatetime: '20180314150122',
refundAmount: '20',
refundDatetime: '20180329172803',
refundResult: '20',
mchtRefundOrderNo: '201803132001321',
returnDatetime: '20180329171856',
signMsg: '7812ABB2B34ADA7E8D3DA19BDC139BED' }
**/
获取退款单的状态 getRefundStatus
let result = await allInPay.getRefundStatus(data);
console.log(result);
/**
返回:
[ { version: 'v2.4',
signType: '0',
merchantId: '100020091218001',
orderNo: '20180314200130',
refundAmount: '200000',
refundDatetime: '20180314051417',
mchtRefundOrderNo: '20180313200130' } ]
**/
验签
const pass = verifySignature(stringResult, functions);
/**
functions取值:
this.functions = {
createOnePayOrder: 'createOnePayOrder', // 获取创建支付单参数
getOnePayOrder: 'getOnePayOrder', // 查询一个支付单
batchGetPayOrders: 'batchGetPayOrders', // 批量查询支付单
refundOnePayOrder: 'refundOnePayOrder', // 退款单个支付单
getRefundStatus: 'getRefundStatus', // 获得退款状态
payCallback: 'payCallback', // 支付回调
}
**/
// example:
// 验证
账户支付
const accountPay = new AccountPay(merchantId, cert, certPassphrase, username, password, {
isTest: true // 是否开启测试,默认false)
});
// 以后的调用中不用传merchantId、USER_NAME、USER_PASS、VERSION、TRX_CODE、DATA_TYPE
申请实时单笔代付
const result = await accountPay.pay(info,trans);
console.log(result);
/**
{ AIPG:
{ INFO:
{ TRX_CODE: '100014',
VERSION: '04',
DATA_TYPE: '2',
REQ_SN: '20060400000362813',
RET_CODE: '0000',
ERR_MSG: '处理成功',
SIGNED_MSG: '3134b0fd928a4bda5bdeaa70f205cea2661cf13005a4ea577cec568478354c2ab4eb751717e5a3104e300abdbe0c8e1310f0822fe65735566a0029a10a45590f705b139843a3c3433ee522d70c33fcc37a64b661c407b03cd05915678c55eaf81500e3aad515d82ce69878ea1c0853489e6b5e501c17f05d37dda163cf417f9191dd46a8b6bc8a6825039d604effd6b7fbaefab1b6e65118c32646a633058176f7ae5f35694c401f6363039b3a2adfb6325e7c2de8ca19971ec3a38dd2a271ca7a61e637f83c568383a7376882def9676060fec64d4f1e6d0a464a3015445700263da418cf3095b52c977917718cce6b36a72bd89c9c734dc5ea877ae1cbe9e7' },
TRANSRET: { RET_CODE: '0000', SETTLE_DAY: '20180329', ERR_MSG: '处理成功' } } }
**/
交易结果查询
const result = await accountPay.queryResult({
REQ_SN: '2006040000036281',
}, {
QUERY_SN: '20060400000362813',
});
console.log(result);
/**
* 打印结果:
* { AIPG:
{ INFO:
{ TRX_CODE: '200004',
VERSION: '04',
DATA_TYPE: '2',
REQ_SN: '2006040000036281',
RET_CODE: '0000',
ERR_MSG: '处理完成@CChS',
SIGNED_MSG: '76b72925ae38ca040af9fe0ec7a931f361b6b6920be99eec6eea851ac3abf8fa80ba443c48646c054cf666386342595f6faa40783ce3278e557bae659b4d41c516b2502dfd6e8613b63fa8037aed7f78f82f15028fdbe1a01d455d3699d66fc27e7f7976ee753d76f2c104c9dc2451e73d32b457e45bad268d4f7164d3c407bed30e7c3b51e73f6ef4ee401be1001e7c506ea613b06912d201f4a74dbdd345a645503a5c436ddedffbee3df216a1932ed5a8e892ab17ece448f89d22ed570bfa23ca466a57acae54974c42da48be238381e2c00a5380740a1212fda374cd0c70e6c872a8e5a27ecc18906af255c9504a3fc1056bf1f3be518e9968fd49cf744c' },
QTRANSRSP:
{ QTDETAIL:
[ { BATCHID: '20060400000362813',
SN: '0',
TRXDIR: '0',
SETTDAY: '20180331',
FINTIME: '20180331162359',
SUBMITTIME: '20180331162358',
ACCOUNT_NO: '6214857451853486',
ACCOUNT_NAME: '黄金',
AMOUNT: '20000',
RET_CODE: '0000',
ERR_MSG: '处理成功' },
{ BATCHID: '20060400000362813',
SN: '0',
TRXDIR: '0',
SETTDAY: '20180321',
FINTIME: '20180321143547',
SUBMITTIME: '20180321143547',
ACCOUNT_NO: '6214857451853485',
ACCOUNT_NAME: '黄金',
AMOUNT: '20000',
RET_CODE: '0000',
ERR_MSG: '处理成功' },
{ BATCHID: '20060400000362813',
SN: '0',
TRXDIR: '0',
SETTDAY: '20180329',
FINTIME: '20180329173214',
SUBMITTIME: '20180329173214',
ACCOUNT_NO: '6214857451853486',
ACCOUNT_NAME: '黄金',
AMOUNT: '20000',
RET_CODE: '0000',
ERR_MSG: '处理成功' } ] } } }
*/
收银宝
const shouyinbao = new Shouyinbao('商户号', 'appId', '交易密钥');
创建支付
// 仅三项必填,其他的视情况选填
const result = await shouyinbao.createPayment({
trxamt: 100,
reqsn: '20060400000362813',
paytype: 'A01'
});
撤销交易(仅限当天)
const result = await shouyinbao.cancel({
oldreqsn: '20060400000362815',
trxamt: 1,
reqsn: 'TK20060400000362815',
});
交易退款(仅限第二天后)
const result = await shouyinbao.refund({
oldreqsn: reqsn,
trxamt: 1,
reqsn: 'TK' + reqsn,
});
交易查询
const result = await shouyinbao.query({
reqsn,
});
万鉴通
const privateCert = `-----BEGIN PRIVATE KEY-----
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBALTsL8OFMhtfK0aoYwV
wQXpqQoGQBHXQo4NTEVc+Wn9vgB8FMSolvrQGncBi/ty7c9jBqoVfhu+DqHRP7DB4Qf
1+gmzZU1SRvIJUewpovGTi/htJnLcm9R4pFC79VqhTquHBaSTz00P8nI5zGPpxXaIf5
DPI7MbRjLatDZ1TikFjAgMBAAECgYEAqHHSEo67VSKpLxLtho26WNf/7ZMBpBNJeaZo
lx1aLRllEBuJpTcapptaQJBAKds4f7dWsKLPdNfCNtX9bB2IC7dNkX65LcUV2BrgqIn
gnyvDPGm2V0ZAHcThm0J1QogwifzbeMjenokPYUVhf0=
-----END PRIVATE KEY-----`;
const wanjiantong = new Wanjiantong('机构号生成的key(见通联文档生成方式或者直接找通联要)', 'merchatId', privateCert);
要素验证(包括三要素、四要素)
const result = await wanjiantong.verifyBankCard({
name: '黄金',
bankCard: '621485755185',
idNumber: '51010619940323',
phone: '1868230', // 如果是四要素验证才传phone
});
通联云账户基础服务(SOAClient)
初始化client
try{
client.setServerAddress(serverAddress);
client.setPrivateKey(privateKey);
client.setPublicKey(publicKey);
client.setSysId(sysid);
client.setSignMethod(signMethod);
client.setVersion(config.YUN.VERSION);
}catch(err){
console.error(err);
}
使用例子-创建一个会员
const soaName = "MemberService";
const param = {
bizUserId: '徐龙66666666',
memberType: '3',
source: '2',
};
const result = await client.request(soaName, "createMember", param);
密钥转换:pfxToPem