-
Notifications
You must be signed in to change notification settings - Fork 24
/
PayBaseX.ts
107 lines (103 loc) · 2.94 KB
/
PayBaseX.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import { fetch } from "../../fetch";
import * as types from "../../types";
import { toXML } from "../../utils";
import PayBase from "./PayBase";
const REPORT_BASE = "/payitil/report";
const CLOSE_ORDER_BASE = "/pay/closeorder";
const UNIFIED_ORDER_BASE = "/pay/unifiedorder";
/**
* `PayBase` 基础上添加方法 `closeOrder`, `payNotify`,是公众号支付,扫码支付,APP支付,H5支付,和小程序支付的基类
*/
export default class PayBaseX extends PayBase {
/**
* 关闭订单
*
* ```
* pay.closeOrder({
* out_trade_no: '120061098828009406'
* })
* ```
* @see {@link https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_3}
*/
public async closeOrder(options: types.CloseOrderOptions) {
const url = this.completeURL(CLOSE_ORDER_BASE);
const extra = await this.createFetchOptions(url);
return fetch<
types.CloseOrderOptions,
types.CloseOrderSuccess,
types.CloseOrderFail
>(options, extra);
}
/**
* 交易保障
*
* ```
* pay.report({
* interface_url: "https://api.mch.weixin.qq.com/pay/unifiedorder",
* execute_time: 1000,
* return_code: "SUCCESS",
* return_msg: "OK",
* result_code: "SUCCESS",
* user_ip: "8.8.8.8"
* });
* ```
* @see {@link https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_8&index=9}
*/
public async report(options: types.ReportOptionsGeneral) {
const url = this.completeURL(REPORT_BASE);
const extra = await this.createFetchOptions(url);
return fetch<
types.ReportOptionsGeneral,
types.ReportSuccess,
types.ReportFail
>(options, extra);
}
/**
* 支付结果通知
*
* ```
* router.post("/wechatpay/notify/refund", (req, res) => {
* getXMLBody(req, options).then(data => {
* pay
* .payNotify(data, async parsedData => {
* // ...
* return {
* return_code: "SUCCESS",
* return_msg: "OK"
* };
* })
* .then(returnData => {
* res.set("Content-Type", "application/xml; charset=utf-8");
* res.end(returnData);
* });
* });
* });
* ```
* @see {@link https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_7&index=8}
*/
public async payNotify(
info: types.PayNotifySuccess | types.PayNotifyFail,
handler: types.PayNotifyHandler
) {
if (info.return_code === "FAIL") {
return toXML({
return_code: info.return_code,
return_msg: info.return_msg
});
}
const result = await handler(info);
return toXML(result);
}
/**
* 统一下单
*/
protected async unifiedOrderBase(options: types.UnifiedOrderOptionsGeneral) {
const url = this.completeURL(UNIFIED_ORDER_BASE);
const extra = await this.createFetchOptions(url);
return fetch<
types.UnifiedOrderOptionsGeneral,
types.UnifiedOrderSuccess,
types.UnifiedOrderFail
>(options, extra);
}
}