apicloud apicloud

注册
查看: 118|回复: 1

[其他] ajax调用微信支付JSAPI 已解决

主题:
14
帖子:
54
云币:
68

[其他] ajax调用微信支付JSAPI 已解决

118 1 | 发表于 2020-4-4 12:13:55 |阅读模式 | |
本帖最后由 瘦鱼全民讲座 于 2020-4-5 12:41 编辑

请教个php技术问题(apicloud微信分享的网页),以下代码是页面B的代码(来自微信JSAPI demo):通过点击页面A中的链接到本页面B,加载的时候获取统一下单接口后返回数据,然后点击页面B中的支付按钮支付。我想改为在页面A点击链接时调用ajax打开页面B(删除下半html部分,仅留上半的php),然后返回数据到页面A,再直接调用支付函数。即不要跳转到页面B。
对php和ajax搭配不熟,页面B只留php部分时用微信浏览器直接跳转打开可以,但是用ajax就没有返回,一直显示readystate 0 status0 statustext error(调试时发现即使把所有代码删除仅留引用文件部分,只要一调用一两行函数例如$tools = new JsApiPay();$openId = $tools->GetOpenid();echo "调试"也无法返回),尝试过各种datatype格式也不行,几天了。非常感谢。

代码:
<?php
/**
*
* example目录下为简单的支付样例,仅能用于搭建快速体验微信支付使用
* 样例的作用仅限于指导如何使用sdk,在安全上面仅做了简单处理, 复制使用样例代码时请慎重
* 请勿直接直接使用样例对外提供服务
*
**/
require_once "../lib/WxPay.Api.php";
require_once "WxPay.JsApiPay.php";
require_once "WxPay.Config.php";
require_once 'log.php';

//初始化日志
$logHandler= new CLogFileHandler("../logs/".date('Y-m-d').'.log');
$log = Log::Init($logHandler, 15);

//打印输出数组信息
function printf_info($data)
{
    foreach($data as $key=>$value){
        echo "<font color='#00ff55;'>$key</font> :  ".htmlspecialchars($value, ENT_QUOTES)." <br/>";
    }
}

//①、获取用户openid
try{

        $tools = new JsApiPay();
        $openId = $tools->GetOpenid();

        //②、统一下单
        $input = new WxPayUnifiedOrder();
        $input->SetBody("test");
        $input->SetAttach("test");
        $input->SetOut_trade_no(WxPayConfig::MCHID.date("YmdHis"));//"sdkphp".date("YmdHis")
        $input->SetTotal_fee("1");
        $input->SetTime_start(date("YmdHis"));
        $input->SetTime_expire(date("YmdHis", time() + 600));
        $input->SetGoods_tag("test");
        $input->SetNotify_url("http://xxxxx.com/wxpay/example/notify.php");
        $input->SetTrade_type("JSAPI");
        $input->SetOpenid($openId);
        $config = new WxPayConfig();
        $order = WxPayApi::unifiedOrder($config, $input);
        echo '<font color="#f00"><b>统一下单支付单信息</b></font><br/>';
        printf_info($order);
        $jsApiParameters = $tools->GetJsApiParameters($order);

        //获取共享收货地址js函数参数
        $editAddress = $tools->GetEditAddressParameters();
} catch(Exception $e) {
        Log::ERROR(json_encode($e));
}
//③、在支持成功回调通知中处理成功之后的事宜,见 notify.php
/**
* 注意:
* 1、当你的回调地址不可访问的时候,回调通知会失败,可以通过查询订单来确认支付是否成功
* 2、jsapi支付时需要填入用户openid,WxPay.JsApiPay.php中有获取openid流程 (文档可以参考微信公众平台“网页授权接口”,
* 参考http://mp.weixin.qq.com/wiki/17/ ... d5d2c37b468d75.html
*/
?>

<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1"/>
    <title>微信支付样例-支付</title>
    <script type="text/javascript">
        //调用微信JS api 支付
        function jsApiCall()
        {
                WeixinJSBridge.invoke(
                        'getBrandWCPayRequest',
                        <?php echo $jsApiParameters; ?>,
                        function(res){
                                WeixinJSBridge.log(res.err_msg);
                                alert(res.err_code+res.err_desc+res.err_msg);
                        }
                );
        }

        function callpay()
        {
                if (typeof WeixinJSBridge == "undefined"){
                    if( document.addEventListener ){
                        document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
                    }else if (document.attachEvent){
                        document.attachEvent('WeixinJSBridgeReady', jsApiCall);
                        document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
                    }
                }else{
                    jsApiCall();
                }
        }
        </script>
        <script type="text/javascript">
        //获取共享地址
        function editAddress()
        {
                WeixinJSBridge.invoke(
                        'editAddress',
                        <?php echo $editAddress; ?>,
                        function(res){
                                var value1 = res.proviceFirstStageName;
                                var value2 = res.addressCitySecondStageName;
                                var value3 = res.addressCountiesThirdStageName;
                                var value4 = res.addressDetailInfo;
                                var tel = res.telNumber;
                                
                                alert(value1 + value2 + value3 + value4 + ":" + tel);
                        }
                );
        }
        
        window.onload = function(){
                if (typeof WeixinJSBridge == "undefined"){
                    if( document.addEventListener ){
                        document.addEventListener('WeixinJSBridgeReady', editAddress, false);
                    }else if (document.attachEvent){
                        document.attachEvent('WeixinJSBridgeReady', editAddress);
                        document.attachEvent('onWeixinJSBridgeReady', editAddress);
                    }
                }else{
                        editAddress();
                }
        };
        
        </script>
</head>
<body>
    <br/>
    <font color="#9ACD32"><b>该笔订单支付金额为<span style="color:#f00;font-size:50px">1分</span>钱</b></font><br/><br/>
        <div align="center">
                <button style="width:210px; height:50px; border-radius: 15px;background-color:#FE6714; border:0px #FE6714 solid; cursor: pointer;  color:white;  font-size:16px;" type="button" >立即支付</button>
        </div>
</body>
</html>


WxpayAPI_php.zip (69.34 KB, 下载次数: 0)

官方版主

UID:791051

主题:
20
帖子:
19870
云币:
5970
发表于 2020-4-7 10:12:48 |
帮顶一下
您需要登录后才可以回帖 登录 | 立即注册

快速回复 返回顶部 返回列表