微信公众号支付,iframe跨域

官方文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6,即可看到h5调起支付需要的参数。

获取后台调用微信生成的支付签名,

$scope.onBridgeReady = function () {
    $http.post("/wechat/createSign", $scope.payOrder).then(function (data) {
        var order = data.data.data;
        WeixinJSBridge.invoke(
            'getBrandWCPayRequest', {
                "appId": order.appid,     //公众号名称,由商户传入
                "timeStamp": order.timeStamp,         //时间戳,自1970年以来的秒数
                "nonceStr": order.nonce_str, //随机串
                "package": "prepay_id=" + order.prepay_id,
                "signType": "MD5",         //微信签名方式
                "paySign": order.sign   //微信签名
            }, function (res) {
                if (res.err_msg == "get_brand_wcpay_request:ok") {
                    //alert("微信支付成功!");
                    $http.post("/wechat/toPaySuccessUrl").then(function (data) {
                        window.location.href = data.data.data + "?orderNo=" + order.out_trade_no;
                    })
                    // window.location.href = "http://qiansheng.imwork.net/paydone.html?orderNo=" + order.out_trade_no;
                } else if (res.err_msg == "get_brand_wcpay_request:cancel") {
                    //alert("用户取消支付!");

                } else {
                    alert("支付失败!");
                }
            });
    })
}

 签名算法:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_3

参考:微信公众号支付(二)H5调起支付 https://blog.csdn.net/zsm15623544116/article/details/79392263

通用demo: https://gitee.com/1600875665/weixinPay

然后需要实现iframe内调起支付

在iframe内发起

top.postMessage(data,'*');

 外部做业务处理,可以做支付调起等

window.addEventListener("message", function (e) {
     wxPay(JSON.parse(e.data))
})

 微信支付方法封装

function wxPay(wxParams) {
        // 微信支付API
        function onBridgeReady() {
            WeixinJSBridge.invoke(
                'getBrandWCPayRequest', wxParams,
                function (res) {
                    if (res.err_msg == "get_brand_wcpay_request:ok") {
                        // 使用以上方式判断前端返回,微信团队郑重提示:
                        //res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
                        console.log(res)
                        alert("成功")
                    } else if (res.err_msg == "get_brand_wcpay_request:cancel") {
                        console.log(res)
                        alert("失败")
                        // window.history.go(-1)
                    }
                });
        }
        if (typeof WeixinJSBridge == "undefined") {
            if (document.addEventListener) {
                document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
            } else if (document.attachEvent) {
                document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
                document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
            }
        } else {
            onBridgeReady();
        }

    }

 注:想在iframe调起window.WeixinJSBridge是不行的,会返回undefined

1.设置监听

window.addEventListener('message', function (msg) {
console.log(msg.data);
})

2.发送 message

window.postMessage(”message“, '*');

实现多页面通讯;

使用postMessage 需要精确的目标origin,不要用 *。

iframe: https://www.w3school.com.cn/tags/tag_iframe.asp

跨域iframe实例: https://www.jb51.net/article/123740.htm https://www.cnblogs.com/qidian10/p/3316714.html

调用parent页面的方法: https://blog.csdn.net/shuaidao_wupengyou/article/details/73497528?locationNum=10&fps=1

window.addeventlistener使用方法:https://www.cnblogs.com/ConfidentLiu/p/7815624.html

微信小程序中使用iframe的方法是通过在web-view标签中使用iframe来实现的。你可以在web-view标签中设置src属性为目标网页的URL,然后在小程序中使用postMessage方法来进行通信。具体步骤如下: 1. 在小程序中的web-view标签中设置src属性为目标网页的URL,例如: ```html <web-view src="https://example.com"></web-view> ``` 2. 在目标网页中,使用window.addEventListener方法监听message事件,接收来自小程序的消息,例如: ```javascript window.addEventListener('message', function(event) { console.log(event.data); // 接收到的消息 }); ``` 3. 在小程序中使用web-view的postMessage方法发送消息给目标网页,例如: ```javascript const webview = plus.webview.getWebviewById('webviewId'); webview.postMessage('message'); ``` 通过以上步骤,你可以在微信小程序中使用iframe进行通信。请注意,使用postMessage方法时需要指定精确的目标origin,不要使用通配符"*"。 #### 引用[.reference_title] - *1* *3* [微信小程序实现PDF预览功能——pdf.js(含源码解析)](https://blog.csdn.net/qq_41929578/article/details/125296356)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [微信公众号支付iframe](https://blog.csdn.net/cxs812760493/article/details/118098465)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值