tq-lib.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. const HmacSHA256 = require('./libs/hmac-sha256.js');
  2. const CryptoJS = require('./libs/core.js');
  3. const config = require('./tq-game-config.js');
  4. const payOrderApi = `https://sdk.tqhd123.cn/client/pay/order`; // 支付上报
  5. const payTypeApi = `https://sdk.tqhd123.cn/client/pay/channel`; // 支付类型
  6. const payResultApi = `https://sdk.tqhd123.cn/client/pay/order-result`; // 获取订单结果
  7. const payUrlApi = `https://sdk.tqhd123.cn/client/pay/exists-order-pay`; // 已创建订单接口,重新获取支付链接
  8. class TQ_LIB {
  9. request = null;
  10. constructor(props) {
  11. this.request = props.request;
  12. }
  13. // 请求验签接口
  14. requestSignApi = (parmas, api, cb) => {
  15. const timestamp = new Date().getTime();
  16. const nonce = randomString32();
  17. const requestSign = getSign(parmas, config.tq_appid, timestamp, nonce);
  18. if (!requestSign) {
  19. cb({ status: 0, message: 'error' });
  20. return;
  21. }
  22. if (!this.request) {
  23. console.error('SDK 初始化错误【request】');
  24. return;
  25. }
  26. this.request({
  27. url: api,
  28. data: parmas,
  29. header: { sign: requestSign, timestamp: timestamp, nonce: nonce },
  30. success: function (r) {
  31. if (r.ret == 1) {
  32. cb({ status: 1, message: 'success', data: r.content });
  33. } else {
  34. cb({ status: 0, message: r.msg });
  35. }
  36. },
  37. fail: function (e) {
  38. cb({ status: 0, message: e });
  39. },
  40. });
  41. };
  42. // 支付类型
  43. getPayType = (cb) => {
  44. const jOrderData = {
  45. tq_app_id: config.tq_appid,
  46. };
  47. this.requestSignApi(jOrderData, payTypeApi, cb);
  48. };
  49. // 已创建订单接口,重新获取支付链接
  50. getPayUrl = (orderInfo, cb) => {
  51. const jOrderData = {
  52. tq_app_id: config.tq_appid,
  53. tq_order_sn: orderInfo.tq_order_sn,
  54. ...orderInfo,
  55. };
  56. this.requestSignApi(jOrderData, payUrlApi, cb);
  57. };
  58. // 获取支付结果
  59. getPayReult = (orderInfo, cb) => {
  60. const jOrderData = {
  61. tq_app_id: config.tq_appid,
  62. tq_order_sn: orderInfo.tq_order_sn,
  63. ...orderInfo,
  64. };
  65. this.requestSignApi(jOrderData, payResultApi, cb);
  66. };
  67. // 支付上报
  68. showOrder = (orderInfo, cb) => {
  69. const jOrderData = {
  70. tq_app_id: config.tq_appid,
  71. os: orderInfo.os || '',
  72. game_order_sn: orderInfo.gameOrderId || '',
  73. user_id: orderInfo.userId || '',
  74. role_id: orderInfo.roleId || '',
  75. role_name: orderInfo.roleName || '',
  76. product_id: orderInfo.productId || '',
  77. product_name: orderInfo.productName || '',
  78. server_id: orderInfo.serverId || '',
  79. server_name: orderInfo.serverName || '',
  80. money: orderInfo.zfAmount || '',
  81. extra: orderInfo.tp || '',
  82. pay_channel_id: orderInfo.payChannelId || '',
  83. company_order_sn: orderInfo.companyOrderId || '',
  84. company_notify_url: orderInfo.companyNotifyUrl || '',
  85. expire_timestamp_millis: orderInfo.expireTimestampMillis || '',
  86. sync_notify_url: orderInfo.syncNotifyUrl || '',
  87. cancel_url: orderInfo.cancelUrl || '',
  88. use_company_order: orderInfo.useCompanyOrder || '',
  89. ...orderInfo,
  90. };
  91. this.requestSignApi(jOrderData, payOrderApi, cb);
  92. };
  93. }
  94. // 验签 - 随机生成 32 位字符串数字组合
  95. const randomString32 = () => {
  96. const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  97. let result = '';
  98. for (let i = 0; i < 32; i++) {
  99. result += chars.charAt(Math.floor(Math.random() * chars.length));
  100. }
  101. return result;
  102. };
  103. // 验签 - 生成签名
  104. const getSign = (params, tq_app_id, timestamp, nonce) => {
  105. try {
  106. const paramsStr = JSON.stringify(params);
  107. return HmacSHA256(paramsStr + tq_app_id + timestamp + nonce, config.tq_game_secret).toString(CryptoJS.enc.Hex);
  108. } catch (error) {
  109. console.log(error);
  110. }
  111. };
  112. module.exports = { TQ_LIB };