node.js集成authorize.net支付
1.申请沙箱登录账号
2.登录后,申请api凭证和密钥
'use strict'; const ApiContracts = require('authorizenet').APIContracts; const ApiControllers = require('authorizenet').APIControllers; const SDKConstants = require('authorizenet').Constants; module.exports = class extends think.Service { //信用卡支付 async authorizeCreditCard(data) { // 创建带有商家身份验证详细信息的对象 var merchantAuthenticationType = new ApiContracts.MerchantAuthenticationType(); // merchantAuthenticationType.setName('*****'); // merchantAuthenticationType.setTransactionKey('********'); // 填充付款数据 var creditCard = new ApiContracts.CreditCardType(); creditCard.setCardNumber(data.CardNumber);//信用卡账号 creditCard.setExpirationDate(data.ExpirationDate);//信用卡过期时间 //支付 var paymentType = new ApiContracts.PaymentType(); paymentType.setCreditCard(creditCard); //创建付款交易对象 var transactionRequestType = new ApiContracts.TransactionRequestType(); transactionRequestType.setTransactionType(ApiContracts.TransactionTypeEnum.AUTHONLYTRANSACTION); transactionRequestType.setPayment(paymentType); transactionRequestType.setAmount(data.Amount);//价格 //创建请求 var createRequest = new ApiContracts.CreateTransactionRequest(); createRequest.setMerchantAuthentication(merchantAuthenticationType); createRequest.setTransactionRequest(transactionRequestType); //调用 var ctrl = new ApiControllers.CreateTransactionController(createRequest.getJSON()); //切换环境,注释测试,放开生产 ctrl.setEnvironment(SDKConstants.endpoint.production); return new Promise((resolve, reject) => { let res = {}; ctrl.execute(function(){ var apiResponse = ctrl.getResponse(); //得到返回值 var response = new ApiContracts.CreateTransactionResponse(apiResponse); //支付结果打印 // console.log(JSON.stringify(response, null, 2)); if(response != null){ if(response.getMessages().getResultCode() == ApiContracts.MessageTypeEnum.OK){ if(response.getTransactionResponse().getMessages() != null){ //返回交易id res.code = 200; res.message = response.getTransactionResponse().getTransId(); } else { if(response.getTransactionResponse().getErrors() != null){ res.code = 500; res.message = response.getTransactionResponse().getErrors().getError()[0].getErrorText(); } } }else { if(response.getTransactionResponse() != null && response.getTransactionResponse().getErrors() != null){ res.code = 500; res.message = response.getTransactionResponse().getErrors().getError()[0].getErrorText(); } else { res.code = 500; res.message = response.getMessages().getMessage()[0].getText(); } } }else { res.code = 500; res.message = 'Null Response.'; } resolve(res); }); }); } //信用卡退款(一天前的订单才可以退款,可在官网配置) async authorizeRefund(data) { var merchantAuthenticationType = new ApiContracts.MerchantAuthenticationType(); merchantAuthenticationType.setName('******'); merchantAuthenticationType.setTransactionKey('**********'); var creditCard = new ApiContracts.CreditCardType(); creditCard.setCardNumber('4242424242424242'); creditCard.setExpirationDate('0822'); var paymentType = new ApiContracts.PaymentType(); paymentType.setCreditCard(creditCard); var transactionRequestType = new ApiContracts.TransactionRequestType(); transactionRequestType.setTransactionType(ApiContracts.TransactionTypeEnum.REFUNDTRANSACTION); transactionRequestType.setPayment(paymentType); transactionRequestType.setAmount(6); transactionRequestType.setRefTransId('*******'); var createRequest = new ApiContracts.CreateTransactionRequest(); createRequest.setMerchantAuthentication(merchantAuthenticationType); createRequest.setTransactionRequest(transactionRequestType); //pretty print request //console.log(JSON.stringify(createRequest.getJSON(), null, 2)); var ctrl = new ApiControllers.CreateTransactionController(createRequest.getJSON()); return new Promise((resolve, reject) => { let res = {}; ctrl.execute(function(){ var apiResponse = ctrl.getResponse(); var response = new ApiContracts.CreateTransactionResponse(apiResponse); //pretty print response //console.log(JSON.stringify(response, null, 2)); if(response != null){ if(response.getMessages().getResultCode() == ApiContracts.MessageTypeEnum.OK){ if(response.getTransactionResponse().getMessages() != null){ //返回交易id res.code = 200; res.message = response.getTransactionResponse().getTransId(); } else { if(response.getTransactionResponse().getErrors() != null){ res.code = 500; res.message = response.getTransactionResponse().getErrors().getError()[0].getErrorText(); } } } else { if(response.getTransactionResponse() != null && response.getTransactionResponse().getErrors() != null){ res.code = 500; res.message = response.getTransactionResponse().getErrors().getError()[0].getErrorText(); } else { res.code = 500; res.message = response.getMessages().getMessage()[0].getText(); } } }else { res.code = 500; res.message = 'Null Response.'; } resolve(res); }); }); } }
以上都是封装好的支付和退款,直接传参调方法就完事了!
注意;测authorize.net正式环境时,要求全球通用的信用卡.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix