q-koa 12.0.8 → 12.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/core/app.js CHANGED
@@ -1534,9 +1534,8 @@ class APP {
1534
1534
  app[appName].attributes[modelName] &&
1535
1535
  app[appName].attributes[modelName][controller + '_id']
1536
1536
  ) {
1537
- const { required, include, where, ...rest } = myInclude[
1538
- j
1539
- ]
1537
+ const { required, include, where, ...rest } =
1538
+ myInclude[j]
1540
1539
  const list = await model.findAll({
1541
1540
  where: {
1542
1541
  [controller + '_id']: target.id,
@@ -1463,6 +1463,39 @@ exports.checkPay = async (ctx) => {
1463
1463
  ctx.SUCCESS({ prefix, out_trade_no, ...payResult })
1464
1464
  }
1465
1465
 
1466
+ exports.checkPayOnly = async (ctx) => {
1467
+ const { app, appName, controller } = getAppByCtx(ctx)
1468
+
1469
+ const {
1470
+ id,
1471
+ prefix,
1472
+ config = 'weixin_mp',
1473
+ pay_config = 'weixin_pay',
1474
+ type = 'MP-WEIXIN',
1475
+ out_trade_no: _out_trade_no,
1476
+ } = ctx.request.body
1477
+
1478
+ const appConfig = getConfig(app)
1479
+ const app_id = (await appConfig.getObject(config)).app_id
1480
+ const { mchId, key, partner_key } = await appConfig.getObject(pay_config)
1481
+
1482
+ const wxpay = WXPay({
1483
+ appid: app_id,
1484
+ mch_id: mchId,
1485
+ partner_key: key.length > 10 ? key : partner_key, // 微信商户平台API密钥
1486
+ })
1487
+
1488
+ const orderPrefix = prefix ? `${prefix}-` : ''
1489
+ const out_trade_no = _out_trade_no
1490
+ ? _out_trade_no
1491
+ : `${key}_${orderPrefix}${id}_${type}`
1492
+ const payResult = await wxpay.queryOrderSync({
1493
+ out_trade_no,
1494
+ })
1495
+
1496
+ ctx.SUCCESS({ prefix, out_trade_no, ...payResult })
1497
+ }
1498
+
1466
1499
  exports.checkRefund = async (ctx) => {
1467
1500
  const { app, appName, controller } = getAppByCtx(ctx)
1468
1501
 
@@ -100,6 +100,73 @@ exports.refund = async ({
100
100
  }
101
101
  }
102
102
 
103
+ exports.refundOnly = async ({
104
+ ctx,
105
+ id,
106
+ prefix = '',
107
+ total_fee,
108
+ refund_fee,
109
+ price,
110
+ pay_type = 'MP-WEIXIN',
111
+ type = '',
112
+ config = 'weixin_mp',
113
+ pay_config = 'weixin_pay',
114
+ out_trade_no: _out_trade_no,
115
+ out_refund_no: _out_refund_no,
116
+ ...rest
117
+ }) => {
118
+ if (!ctx) throw new Error('?ctx')
119
+ const { app, appName } = getAppByCtx(ctx)
120
+ const appConfig = getConfig(app)
121
+ const { mchId, key, appId, partner_key } = await appConfig.getObject(
122
+ pay_config
123
+ )
124
+ const { site_host } = await appConfig.getObject('base')
125
+
126
+ const payObj = new Pay({
127
+ appId: appId,
128
+ mchId: mchId,
129
+ key: key.length > 10 ? key : partner_key, // 微信商户平台API密钥,
130
+ pfx: await fsPromise.readFile(
131
+ path.resolve(
132
+ __dirname,
133
+ `${process.cwd()}/app/${appName}/plugins/weixin/${key}/apiclient_cert.p12`
134
+ )
135
+ ), // 微信商户平台证书
136
+ })
137
+ const out_trade_no =
138
+ _out_trade_no ||
139
+ (prefix ? `${key}_${prefix}-${id}_${pay_type}` : `${key}_${id}_${pay_type}`)
140
+
141
+ const wxpay = WXPay({
142
+ appid: appId,
143
+ mch_id: mchId,
144
+ partner_key: key.length > 10 ? key : partner_key, // 微信商户平台API密钥
145
+ })
146
+
147
+ try {
148
+ const out_refund_no = _out_refund_no || [`${prefix}-${id}`, type].join('_')
149
+ const data = {
150
+ ...rest,
151
+ out_trade_no,
152
+ total_fee: Math.round((refund_fee || price) * 100),
153
+ refund_fee: Math.round((refund_fee || price) * 100),
154
+ out_refund_no,
155
+ }
156
+
157
+ console.log(data)
158
+ const { result_code, err_code_des, ...restData } = await payObj.refund(data)
159
+ if (result_code === 'SUCCESS') {
160
+ return restData
161
+ } else {
162
+ console.error(data)
163
+ throw new Error(err_code_des)
164
+ }
165
+ } catch (e) {
166
+ throw new Error(e.message)
167
+ }
168
+ }
169
+
103
170
  exports.refund_new = async ({
104
171
  ctx,
105
172
  id,
@@ -646,3 +713,64 @@ exports.removereceiver = async ({
646
713
  })
647
714
  return res
648
715
  }
716
+
717
+ exports.downloadBill = async ({ ctx, pay_config = 'weixin_pay', ...rest }) => {
718
+ if (!ctx) throw new Error('?ctx')
719
+ const { app, appName } = getAppByCtx(ctx)
720
+ const appConfig = getConfig(app)
721
+ const { mchId, key, appId, partner_key } = await appConfig.getObject(
722
+ pay_config
723
+ )
724
+ const payObj = new Pay({
725
+ appId: appId,
726
+ mchId: mchId,
727
+ key: key.length > 10 ? key : partner_key, // 微信商户平台API密钥,
728
+ pfx: await fsPromise.readFile(
729
+ path.resolve(
730
+ __dirname,
731
+ `${process.cwd()}/app/${appName}/plugins/weixin/${key}/apiclient_cert.p12`
732
+ )
733
+ ), // 微信商户平台证书
734
+ })
735
+
736
+ try {
737
+ const result = await payObj.downloadBill(rest)
738
+
739
+ const arr = result.split('\r\n')
740
+ const list = arr.slice(1, arr.length - 3)
741
+ return {
742
+ header: arr[0],
743
+ list,
744
+ result: list.map((item) => {
745
+ const array = item.split(',')
746
+ const orderdate = array[20].substring(1).slice(2, 10)
747
+ return {
748
+ created_at: array[0].substring(1),
749
+ transactionid: array[5].substring(1),
750
+ order_id: Number(array[6].substring(1).split('_')[1]),
751
+ openid: array[7].substring(1),
752
+ price: Number(array[12].substring(1)),
753
+ refund_price: Number(array[16].substring(1)),
754
+ remark: array[20].substring(1),
755
+ rate_price: Number(array[22].substring(1)),
756
+ type: array[9].substring(1),
757
+ order_date: `${orderdate.slice(0, 4)}-${orderdate.slice(
758
+ 4,
759
+ 6
760
+ )}-${orderdate.slice(6, 8)}`,
761
+ }
762
+ }),
763
+ totalHeader: arr[arr.length - 3],
764
+ total: arr[arr.length - 2],
765
+ totalResult: {
766
+ number: Number(arr[arr.length - 2].split(',')[0].substring(1)),
767
+ total_price: Number(arr[arr.length - 2].split(',')[1].substring(1)),
768
+ refund_price: Number(arr[arr.length - 2].split(',')[2].substring(1)),
769
+ rate_price: Number(arr[arr.length - 2].split(',')[4].substring(1)),
770
+ price: Number(arr[arr.length - 2].split(',')[5].substring(1)),
771
+ },
772
+ }
773
+ } catch {
774
+ return []
775
+ }
776
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "q-koa",
3
- "version": "12.0.8",
3
+ "version": "12.0.9",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {