Ver código fonte

Update hambitInr.ts

test 7 meses atrás
pai
commit
ef9d7af54a
1 arquivos alterados com 129 adições e 0 exclusões
  1. 129 0
      src/modules/dj/service/channels/hambitInr.ts

+ 129 - 0
src/modules/dj/service/channels/hambitInr.ts

@@ -14,8 +14,11 @@ const PAY_URL = '/api/v3/ind/createCollectingOrder';
 const QUERY_URL = '/api/v3/ind/query/collectingOrder'
 const BALANCE_URL = '/api/v3/ind/query/balance'
 const BANK_URL = '/api/v3/ind/query/bank'
+const WITHDRAW_URL = '/api/v3/ind/createTransferOrder';
+const QUERY_WITHDRAW_URL = '/api/v3/ind/query/transferOrder'
 
 const NOTIFY_HOST = `http://157.175.73.225/api/admin/dj/open/hambit/inr/notifyOrder`;
+const WITHDRAW_NOTIFY_HOST = `http://157.175.73.225/api/admin/dj/open/hambit/inr/notifyWithdraw`;
 
 const CHANNEL_TYPE = "BANK";
 
@@ -193,4 +196,130 @@ export class HambitInrService extends BaseService {
       throw new Error(msg);
     }
   }
+
+  async withdraw(payload) {
+    const param = {
+      currencyAmount: (+payload.amount).toFixed(2),
+      channelType: CHANNEL_TYPE,
+      externalOrderId: payload.orderNo,
+      accountId: payload.accountNo,
+      accountType: 'INR',
+      ifSC: payload.bankCode,
+      notifyUrl: WITHDRAW_NOTIFY_HOST
+    };
+    const timestamp = +moment();
+    const nonce = uuidv4();
+    const signStr = this.utils.signSort({
+      timestamp,
+      nonce,
+      access_key: ACCESS_KEY,
+      ...param
+    });
+    const sign = this.utils.signByHmacSha1(signStr, SECRET_KEY);
+    const res = await this.httpService.post(HOST + WITHDRAW_URL, param, {
+      headers: {
+        'access_key': ACCESS_KEY,
+        'timestamp': timestamp,
+        'nonce': nonce,
+        'sign': sign
+      }
+    });
+    this.logger.info('代付接口返回', param, JSON.stringify(res.data));
+    const { success, msg, desc, data } = res.data;
+    if (success && data.orderId) {
+      return {
+        status: 2,
+        traceNo: data.orderId
+      };
+    } else {
+      return {
+        status: 3,
+        message: desc || msg
+      }
+    }
+  }
+
+  async handleWithdrawNotify(payload, headers) {
+    const sign = headers['sign'];
+    const timestamp = headers['timestamp'];
+    const nonce = headers['nonce'];
+    const signStr = this.utils.signSort({
+      timestamp,
+      nonce,
+      access_key: ACCESS_KEY,
+      ...payload
+    });
+    const validSign = this.utils.signByHmacSha1(signStr, SECRET_KEY);
+    if (sign !== validSign) {
+      throw new Error('sign error');
+    }
+    if (+payload.orderStatusCode !== 8 && +payload.orderStatusCode !== 4 && +payload.orderStatusCode !== 16) {
+      throw new Error('order no result');
+    }
+    let status = 2;
+    if (+payload.orderStatusCode === 8) {
+      status = 8;
+    } else if (+payload.orderStatusCode === 4 || +payload.orderStatusCode === 16) {
+      status = 3;
+    }
+    return {
+      date: new Date(),
+      status: status,
+      message: payload.errorMsg,
+      orderNo: payload.externalOrderId
+    };
+  }
+
+  async queryWithdraw(payload) {
+    const param = {
+      externalOrderId: payload.orderNo
+    };
+    const timestamp = +moment();
+    const nonce = uuidv4();
+    const signStr = this.utils.signSort({
+      timestamp,
+      nonce,
+      access_key: ACCESS_KEY,
+      ...param
+    });
+    const sign = this.utils.signByHmacSha1(signStr, SECRET_KEY);
+    const res = await this.httpService.post(HOST + QUERY_WITHDRAW_URL, param, {
+      headers: {
+        'access_key': ACCESS_KEY,
+        'timestamp': timestamp,
+        'nonce': nonce,
+        'sign': sign
+      }
+    });
+    this.logger.info('查询代付接口返回', JSON.stringify(res.data));
+    const { success, msg, data = [] } = res.data;
+    const orderData = data.find(item => item.externalOrderId === payload.orderNo)
+    if (success && orderData) {
+      if (+orderData.orderStatus === 4 || +orderData.orderStatus === 16) {
+        return {
+          date: new Date(),
+          status: 3,
+          message: orderData.errorMsg,
+          orderNo: orderData.externalOrderId
+        };
+      } else if (+orderData.orderStatus === 8) {
+        return {
+          date: new Date(),
+          status: 8,
+          message: orderData.errorMsg,
+          orderNo: orderData.externalOrderId
+        };
+      }
+      return {
+        status: 1,
+        traceNo: orderData.orderId,
+        date: new Date()
+      };
+    } else {
+      return {
+        status: 3,
+        message: '渠道订单不存在'
+      };
+    }
+  }
 }