|
@@ -12,6 +12,7 @@ import { OpenPaymentAccountEntity } from '../entity/open_payment_account';
|
|
|
import { EasyPayAdapter } from '../../payment/adapter/easypay.adapter';
|
|
|
import * as md5 from 'md5';
|
|
|
import { OSSService } from '@midwayjs/oss';
|
|
|
+import { OpenAccountEntity } from '../entity/open_account';
|
|
|
/**
|
|
|
* 描述
|
|
|
*/
|
|
@@ -25,6 +26,9 @@ export class EasyOpenService extends BaseService {
|
|
|
|
|
|
@InjectEntityModel(OpenPaymentAccountEntity)
|
|
|
openPaymentAccountEntity: Repository<OpenPaymentAccountEntity>;
|
|
|
+
|
|
|
+ @InjectEntityModel(OpenAccountEntity)
|
|
|
+ openAccountEntity: Repository<OpenAccountEntity>;
|
|
|
|
|
|
@Inject()
|
|
|
logger: ILogger;
|
|
@@ -32,7 +36,6 @@ export class EasyOpenService extends BaseService {
|
|
|
@Inject()
|
|
|
easyPayAdapter: EasyPayAdapter;
|
|
|
|
|
|
-
|
|
|
@Inject()
|
|
|
ossService: OSSService;
|
|
|
|
|
@@ -43,7 +46,7 @@ export class EasyOpenService extends BaseService {
|
|
|
async init() {
|
|
|
// await super.init();
|
|
|
// this.setEntity(this.businessEntity);
|
|
|
- this.easyPayAdapter.Init()
|
|
|
+ this.easyPayAdapter.Init();
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -88,25 +91,36 @@ export class EasyOpenService extends BaseService {
|
|
|
/*
|
|
|
记录用户的订单数据来源
|
|
|
*/
|
|
|
- async save_user_order(orderInfo, params, type: OrderType, baseOrderInfo?:any) {
|
|
|
+ async save_user_order(
|
|
|
+ orderInfo,
|
|
|
+ params,
|
|
|
+ type: OrderType,
|
|
|
+ baseOrderInfo?: any
|
|
|
+ ) {
|
|
|
+ console.log(92, 'save_user_order');
|
|
|
+
|
|
|
try {
|
|
|
let openOrderObj: any = {
|
|
|
mch_id: this.ctx.admin.merchant.mchId,
|
|
|
account_id: params.account_id,
|
|
|
request_id: params?.payment?.request_id,
|
|
|
+ order_id: orderInfo.id,
|
|
|
order_type: type,
|
|
|
additional_info: {
|
|
|
orderInfo,
|
|
|
params,
|
|
|
type,
|
|
|
- baseOrderInfo // 当发生流水交易时,记录原始订单,做后续的退款操作
|
|
|
+ baseOrderInfo, // 当发生流水交易时,记录原始订单,做后续的退款操作
|
|
|
},
|
|
|
};
|
|
|
|
|
|
// 收单支付订单
|
|
|
if (OrderType.ACQUIRING_PAYMENT === type) {
|
|
|
openOrderObj.request_id = params?.request_id;
|
|
|
- openOrderObj.amount = params.payment.amount - this.getTotransfersAmount(params.payment.amount);
|
|
|
+ openOrderObj.from_account_id = params.account_id;
|
|
|
+ openOrderObj.amount =
|
|
|
+ params.payment.amount -
|
|
|
+ this.getTotransfersAmount(params.payment.amount);
|
|
|
openOrderObj.currency = params.payment.currency;
|
|
|
}
|
|
|
|
|
@@ -120,7 +134,9 @@ export class EasyOpenService extends BaseService {
|
|
|
// 换汇
|
|
|
if (OrderType.CURRENCY_EXCHANGE === type) {
|
|
|
openOrderObj.request_id = params?.request_id;
|
|
|
- openOrderObj.amount = params.sell_amount - this.getTotransfersAmount(params.sell_amount); // 卖出金额
|
|
|
+ openOrderObj.from_account_id = params.account_id;
|
|
|
+ openOrderObj.amount =
|
|
|
+ params.sell_amount - this.getTotransfersAmount(params.sell_amount); // 卖出金额
|
|
|
openOrderObj.currency = params.sell_currency; // 卖出币种
|
|
|
openOrderObj.target_amount = params.buy_amount; // 买入金额
|
|
|
openOrderObj.target_currency = params.buy_currency; // 买入币种
|
|
@@ -128,14 +144,17 @@ export class EasyOpenService extends BaseService {
|
|
|
|
|
|
// 付款
|
|
|
if (OrderType.PAYMENT === type) {
|
|
|
- openOrderObj.amount = params.amount - this.getTotransfersAmount(params.amount);
|
|
|
+ openOrderObj.amount =
|
|
|
+ params.amount - this.getTotransfersAmount(params.amount);
|
|
|
openOrderObj.currency = params.currency;
|
|
|
+ openOrderObj.from_account_id = params.account_id;
|
|
|
openOrderObj.request_id = params?.request_id;
|
|
|
}
|
|
|
|
|
|
// 转账
|
|
|
if (OrderType.TRANSFER === type) {
|
|
|
- openOrderObj.amount = params.amount - this.getTotransfersAmount(params.amount);
|
|
|
+ openOrderObj.amount =
|
|
|
+ params.amount - this.getTotransfersAmount(params.amount);
|
|
|
openOrderObj.currency = params.currency;
|
|
|
openOrderObj.from_account_id = params.from_account_id;
|
|
|
openOrderObj.to_account_id = params.to_account_id;
|
|
@@ -158,9 +177,14 @@ export class EasyOpenService extends BaseService {
|
|
|
// }
|
|
|
|
|
|
await this.openPaymentOrderEntity.insert(openOrderObj);
|
|
|
- // 如果不是流水交易和退款交易的话,进行费率扣除
|
|
|
- if(type !== OrderType.TRANSACTION_FEE_ORDER && OrderType.ACQUIRING_REFUND !== type) {
|
|
|
- await this.capturedTransferStream(openOrderObj, type)
|
|
|
+ // - 如果不是流水交易和退款交易的话,进行费率扣除
|
|
|
+ // 如果是付款流程,执行扣款
|
|
|
+ if (
|
|
|
+ // type !== OrderType.TRANSACTION_FEE_ORDER &&
|
|
|
+ // OrderType.ACQUIRING_REFUND !== type
|
|
|
+ OrderType.PAYMENT === type
|
|
|
+ ) {
|
|
|
+ await this.capturedTransferStream(openOrderObj, params, type);
|
|
|
}
|
|
|
|
|
|
/* 更新相关订单信息 */
|
|
@@ -187,37 +211,61 @@ export class EasyOpenService extends BaseService {
|
|
|
this.logger.error('save_user_order:error: ', error);
|
|
|
}
|
|
|
}
|
|
|
- createRequest_id(openOrderObj) {
|
|
|
- md5(JSON.stringify({
|
|
|
+ createRequest_id(openOrderObj, type) {
|
|
|
+ return md5(
|
|
|
+ JSON.stringify({
|
|
|
mch_id: openOrderObj.mchId,
|
|
|
account_id: openOrderObj.account_id,
|
|
|
request_id: openOrderObj.request_id,
|
|
|
- }))
|
|
|
+ type,
|
|
|
+ time: `${new Date().getTime()}`
|
|
|
+ })
|
|
|
+ );
|
|
|
}
|
|
|
getTotransfersAmount(amount) {
|
|
|
+ console.log('getTotransfersAmount', amount);
|
|
|
const rate = this.ctx.admin.merchant.baseRate / 100;
|
|
|
- const result = Math.round(amount * rate * 100) / 100;
|
|
|
+ const result = Math.round(amount * rate * 100);
|
|
|
return result;
|
|
|
}
|
|
|
// 截取流水的转账
|
|
|
- async capturedTransferStream(openOrderObj, type) {
|
|
|
- // /v1/transfers
|
|
|
- const params = {
|
|
|
- // ...openOrderObj,
|
|
|
- request_id: this.createRequest_id(openOrderObj),
|
|
|
- from_account_id: openOrderObj.account_id,
|
|
|
- to_account_id: this.easyPayAdapter.baseInfo.account_id,
|
|
|
- currency: openOrderObj.currency,
|
|
|
- amount: this.getTotransfersAmount(openOrderObj.amount),
|
|
|
- purpose: "收取手续费用"
|
|
|
+ async capturedTransferStream(openOrderObj, sourceParams, type) {
|
|
|
+ try {
|
|
|
+ console.log(204, openOrderObj);
|
|
|
+ const merchantInfo = await this.getMerchantInfo(openOrderObj.mch_id)
|
|
|
+ // /v1/transfers
|
|
|
+ const params = {
|
|
|
+ // ...openOrderObj,
|
|
|
+ request_id: this.createRequest_id(openOrderObj, type),
|
|
|
+ from_account_id: merchantInfo.account_id,
|
|
|
+ to_account_id: this.easyPayAdapter.baseInfo.account_id,
|
|
|
+ currency: openOrderObj.currency,
|
|
|
+ amount: this.getTotransfersAmount(sourceParams.amount),
|
|
|
+ purpose: '收取手续费用',
|
|
|
+ };
|
|
|
+ console.log(232, params);
|
|
|
+ // 截取流水的转账
|
|
|
+ const res = await this.easyPayAdapter.request(
|
|
|
+ 'POST',
|
|
|
+ '/v1/transfers',
|
|
|
+ params
|
|
|
+ );
|
|
|
+ console.log(239, res);
|
|
|
+ if(res.hasOwnProperty('errors') && res.errors.length> 1) {
|
|
|
+ throw res.errors
|
|
|
+ }
|
|
|
+ // 记录流水
|
|
|
+ await this.save_user_order(
|
|
|
+ res,
|
|
|
+ params,
|
|
|
+ OrderType.TRANSACTION_FEE_ORDER,
|
|
|
+ openOrderObj
|
|
|
+ );
|
|
|
+ } catch (err) {
|
|
|
+ console.log(247, err);
|
|
|
}
|
|
|
- // 截取流水的转账
|
|
|
- const res = await this.easyPayAdapter.request("POST", "/v1/transfers", params);
|
|
|
- // 记录流水
|
|
|
- await this.save_user_order(res, params, OrderType.TRANSACTION_FEE_ORDER, openOrderObj);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
createSign(params, timestamp, nonce, secret) {
|
|
|
// 2. 生成签名
|
|
|
const sign = this.generateSignature(
|
|
@@ -313,8 +361,7 @@ export class EasyOpenService extends BaseService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- async upload (file: any) {
|
|
|
+ async upload(file: any) {
|
|
|
try {
|
|
|
// 生成 OSS 存储路径(带原始文件名)
|
|
|
const ossPath = `fusion/uploads/${Date.now()}_${file.filename}`;
|
|
@@ -323,26 +370,33 @@ export class EasyOpenService extends BaseService {
|
|
|
// 使用临时文件路径上传
|
|
|
const result = await this.ossService.put(
|
|
|
ossPath,
|
|
|
- file.data, // 直接使用 file.data 作为路径
|
|
|
+ file.data, // 直接使用 file.data 作为路径
|
|
|
// 如果需要设置 headers 可以添加第三个参数
|
|
|
{ headers: { 'Content-Type': file.mimeType } }
|
|
|
);
|
|
|
- console.log(file.data)
|
|
|
+ console.log(file.data);
|
|
|
// await unlinkSync(file.data);
|
|
|
|
|
|
-
|
|
|
return {
|
|
|
url: result.url,
|
|
|
ossPath,
|
|
|
originalName: file.filename,
|
|
|
- size: file.size
|
|
|
+ size: file.size,
|
|
|
};
|
|
|
- } catch (e) {
|
|
|
-
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
+ } catch (e) {}
|
|
|
}
|
|
|
|
|
|
+ // 获取商户信息
|
|
|
+ async getMerchantInfo(mch_id = 'ep001@fusion.com') {
|
|
|
+ const merchantInfo = await this.openAccountEntity.findOne({
|
|
|
+ where: {
|
|
|
+ mch_id: this.ctx.admin.merchant.mchId,
|
|
|
+ // mch_id: 'easypay@qq.com',
|
|
|
+ // mch_id: 'ep001@fusion.com',
|
|
|
+ // mch_id: 'easypay003@fusion.com',
|
|
|
+ // mch_id
|
|
|
+ },
|
|
|
+ });
|
|
|
+ return merchantInfo;
|
|
|
+ }
|
|
|
}
|