微信h5 支付,已经获得weixin://wap/pay?prepayid,但是无法调起微信客户端支付

经过几个接口,最终获得一个包含调起微信客户端的支付链接

但是直接打开这个页面,却不能调起微信客户端支付,原因是,在打开新页面的时候,需要设置  a.rel = "noreferrer";

<body>
<a href="javascript:void(0)" onclick="openNewWindowNoreferrer(this)">点击支付</a>
</body>
<script src="https://libs.cdnjs.net/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/qrcodejs2@0.0.2/qrcode.js"></script>
<script type="text/javascript">
    //判断是否是IE
    function isIE() {
        if (!!window.ActiveXObject || "ActiveXObject" in window)
            return true;
        else
            return false;
    }
    //ie不带referer打开url,url要打开的链接,blankurl指向一个空页面
    function ieNorefererOpen(url, blankurl) {
        if (blankurl === undefined) {
            //blankurl = null;
            blankurl = "https://www.alipay.com/";
        }

        var win = window.open(blankurl, '_blank');
        var doc = win.document;
        doc.body.innerHTML='';
        //doc.clear();
        doc.write('<html><head><meta http-equiv="Refresh" content="0; URL=' + url + '"/><meta name="__hash__" content="a7f55f8c2998c0e892ee07994c6c48a6_7dc297b550c20b088c34f63cad13fea8" /></head><body></body></html>');
        doc.close();
    }
    var full_link = "weixin:\/\/wap\/pay?prepayid%3Dwx021611457196396d56be1d871710454700\u0026package=328998914\u0026noncestr=1585815194\u0026sign=2144fbd3bd301771d574f2d5cb9aee89";
    //在新的窗口不带referer打开链接,a超链接对象,full_link要打开的链掿
    function openNewWindowNoreferrer(a) {
        if (isIE()) {
            a.rel = "noreferrer";
            a.target = "_self";
            ieNorefererOpen(full_link);
        } else {
            a.rel = "noreferrer";
            a.target = "_blank";
            a.href = full_link;
        }
    }
</script>

点击支付 链接会打开full_link 中的支付链接

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
以下是使用PHP编写微信支付退款接口的示例代码: ```php <?php // 公众账号ID或应用ID $appid = 'your_appid'; // 商户号 $mch_id = 'your_mch_id'; // 商户密钥 $key = 'your_mch_key'; // 微信订单号或商户订单号(二选一) $transaction_id = 'your_transaction_id'; // 微信订单号 $out_trade_no = 'your_out_trade_no'; // 商户订单号 // 商户退款单号 $out_refund_no = 'your_out_refund_no'; // 订单金额(单位:分) $total_fee = 100; // 订单金额,例如:1元 // 退款金额(单位:分) $refund_fee = 100; // 退款金额,例如:1元 // 退款接口地址 $url = 'https://api.mch.weixin.qq.com/secapi/pay/refund'; // 生成随机字符串 $nonce_str = md5(mt_rand()); // 构建请求参数 $params = array( 'appid' => $appid, 'mch_id' => $mch_id, 'nonce_str' => $nonce_str, 'transaction_id' => $transaction_id, 'out_trade_no' => $out_trade_no, 'out_refund_no' => $out_refund_no, 'total_fee' => $total_fee, 'refund_fee' => $refund_fee, ); // 生成签名 ksort($params); // 按照参数名ASCII码从小到大排序 $string = ''; foreach ($params as $key => $value) { $string .= $key . '=' . $value . '&'; } $string .= 'key=' . $key; $sign = strtoupper(md5($string)); // 添加签名到请求参数 $params['sign'] = $sign; // 将请求参数转换为XML格式 $xml = '<xml>'; foreach ($params as $key => $value) { $xml .= '<' . $key . '>' . $value . '</' . $key . '>'; } $xml .= '</xml>'; // 发起请求 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM'); curl_setopt($ch, CURLOPT_SSLCERT, 'path/to/your/apiclient_cert.pem'); curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM'); curl_setopt($ch, CURLOPT_SSLKEY, 'path/to/your/apiclient_key.pem'); $response = curl_exec($ch); curl_close($ch); // 解析响应结果 $result = simplexml_load_string($response); if ($result->return_code == 'SUCCESS' && $result->result_code == 'SUCCESS') { // 退款成功 echo '退款成功'; } else { // 退款失败 echo '退款失败:' . $result->return_msg; } ?> ``` 请注意替换示例代码中的`your_appid`、`your_mch_id`、`your_mch_key`、`your_transaction_id`、`your_out_trade_no`、`your_out_refund_no`、`$total_fee`、`$refund_fee`和证书路径为您自己的实际值。同时,确保您已经下载了微信支付证书,并将证书路径填写到代码中的`CURLOPT_SSLCERT`和`CURLOPT_SSLKEY`处。 此外,还需要注意确保服务器环境中安装了cURL扩展,并开启了SSL支持。 以上代码仅为示例,实际使用时还需要根据自己的业务逻辑进行相应的处理和错误处理。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值