WebApp【公共组件库】@前端(For Git Submodule)
Tevin
2025-03-19 202b2885fca7905f826cec2c5ce4630b514bcf33
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
/**
 * WxH5Pay
 * @author Tevin
 */
 
import { Tools } from '@components/common/Tools';
 
export class WxH5Pay {
    constructor() {
    }
 
    callWxPay(payParam, callback) {
        Tools.toast('正在支付...');
        setTimeout(() => {
            if (typeof WeixinJSBridge === 'undefined') {
                if (document.addEventListener) {
                    document.addEventListener('WeixinJSBridgeReady', () => {
                        this._jsApiCall(payParam, callback);
                    }, false);
                } else if (document.attachEvent) {
                    document.attachEvent('WeixinJSBridgeReady', () => {
                        this._jsApiCall(payParam, callback);
                    });
                    document.attachEvent('onWeixinJSBridgeReady', () => {
                        this._jsApiCall(payParam, callback);
                    });
                }
            } else {
                this._jsApiCall(payParam, callback);
            }
        }, 100);
    }
 
    _jsApiCall(payParam, callback) {
        window._hmt.push(['_trackEvent', 'wx', 'wx-wxPay', 'wx-wxPay-BrandWCPay:start', 0]);
        // 发起支付
        const sign = JSON.parse(payParam);
        WeixinJSBridge.invoke('getBrandWCPayRequest', sign, res => {
            // 支付结果
            if (res.err_msg === 'get_brand_wcpay_request:ok') {
                callback && callback('ok', '支付成功!');
                window._hmt.push(['_trackEvent', 'wx', 'wx-wxPay', 'wx-wxPay-brandWCPay:ok', 0]);
            } else if (res.err_msg === 'get_brand_wcpay_request:cancel') {
                callback && callback('cancel', '支付已取消!');
                window._hmt.push(['_trackEvent', 'wx', 'wx-wxPay', 'wx-wxPay-brandWCPay:cancel', 0]);
            } else {
                let msg = '支付失败!';
                const errMsg = res.err_msg || res.errMsg || '';
                // 例如 "chooseWXPay:没有此SDK或暂不支持此SDK模拟"
                msg += errMsg ? '(' + errMsg + ')' : '';
                callback && callback('fail', msg);
                window._hmt.push(['_trackEvent', 'wx', 'wx-wxPay', 'wx-wxPay-brandWCPay:fail', 0]);
            }
        });
    }
 
}
 
// 全局服务实例
export const $wxH5Pay = new WxH5Pay();