const HmacSHA256 = require('./libs/hmac-sha256.js'); const CryptoJS = require('./libs/core.js'); const config = require('./tq-game-config.js'); const payOrderApi = `https://sdk.tqhd123.cn/client/pay/order`; // 支付上报 const payTypeApi = `https://sdk.tqhd123.cn/client/pay/channel`; // 支付类型 const payResultApi = `https://sdk.tqhd123.cn/client/pay/order-result`; // 获取订单结果 const payUrlApi = `https://sdk.tqhd123.cn/client/pay/exists-order-pay`; // 已创建订单接口,重新获取支付链接 class TQ_LIB { request = null; constructor(props) { this.request = props.request; } // 请求验签接口 requestSignApi = (parmas, api, cb) => { const timestamp = new Date().getTime(); const nonce = randomString32(); const requestSign = getSign(parmas, config.tq_appid, timestamp, nonce); if (!requestSign) { cb({ status: 0, message: 'error' }); return; } if (!this.request) { console.error('SDK 初始化错误【request】'); return; } this.request({ url: api, data: parmas, header: { sign: requestSign, timestamp: timestamp, nonce: nonce }, success: function (r) { if (r.ret == 1) { cb({ status: 1, message: 'success', data: r.content }); } else { cb({ status: 0, message: r.msg }); } }, fail: function (e) { cb({ status: 0, message: e }); }, }); }; // 支付类型 getPayType = (cb) => { const jOrderData = { tq_app_id: config.tq_appid, }; this.requestSignApi(jOrderData, payTypeApi, cb); }; // 已创建订单接口,重新获取支付链接 getPayUrl = (orderInfo, cb) => { const jOrderData = { tq_app_id: config.tq_appid, tq_order_sn: orderInfo.tq_order_sn, ...orderInfo, }; this.requestSignApi(jOrderData, payUrlApi, cb); }; // 获取支付结果 getPayReult = (orderInfo, cb) => { const jOrderData = { tq_app_id: config.tq_appid, tq_order_sn: orderInfo.tq_order_sn, ...orderInfo, }; this.requestSignApi(jOrderData, payResultApi, cb); }; // 支付上报 showOrder = (orderInfo, cb) => { const jOrderData = { tq_app_id: config.tq_appid, os: orderInfo.os || '', game_order_sn: orderInfo.gameOrderId || '', user_id: orderInfo.userId || '', role_id: orderInfo.roleId || '', role_name: orderInfo.roleName || '', product_id: orderInfo.productId || '', product_name: orderInfo.productName || '', server_id: orderInfo.serverId || '', server_name: orderInfo.serverName || '', money: orderInfo.zfAmount || '', extra: orderInfo.tp || '', pay_channel_id: orderInfo.payChannelId || '', company_order_sn: orderInfo.companyOrderId || '', company_notify_url: orderInfo.companyNotifyUrl || '', expire_timestamp_millis: orderInfo.expireTimestampMillis || '', sync_notify_url: orderInfo.syncNotifyUrl || '', cancel_url: orderInfo.cancelUrl || '', use_company_order: orderInfo.useCompanyOrder || '', ...orderInfo, }; this.requestSignApi(jOrderData, payOrderApi, cb); }; } // 验签 - 随机生成 32 位字符串数字组合 const randomString32 = () => { const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; let result = ''; for (let i = 0; i < 32; i++) { result += chars.charAt(Math.floor(Math.random() * chars.length)); } return result; }; // 验签 - 生成签名 const getSign = (params, tq_app_id, timestamp, nonce) => { try { const paramsStr = JSON.stringify(params); return HmacSHA256(paramsStr + tq_app_id + timestamp + nonce, config.tq_game_secret).toString(CryptoJS.enc.Hex); } catch (error) { console.log(error); } }; module.exports = { TQ_LIB };