zoukankan      html  css  js  c++  java
  • 微信公众平台无法使用支付宝收付款的解决方案

    信心慢慢的在网页上试通了支付宝网页支付,结果微信不买账,把微信好一通抱怨,问题还要解决,就在网上找解决方法,

    网上解决方法很多,有的能看明白,有的看不明白,反正最后搞出来了,其实也很简单,给大家看一下我的处理方法

    参考官网demo:https://docs.open.alipay.com/203/105285/

    ap.jspay.htm是必须的,放好位置,配置好调用链接

    首先还是原本的调用方式,代码如下,还需要把接口中echo $result给注掉

     1 public function getResult()
     2 {
     3     vendor('AliPay.wappay.service.AlipayTradeService');
     4     vendor('AliPay.wappay.buildermodel.AlipayTradeWapPayContentBuilder');
     5     $config = C('AliPayConf');
     6     
     7     $payRequestBuilder = new AlipayTradeWapPayContentBuilder();
     8     $payRequestBuilder->setBody($this->body);
     9     $payRequestBuilder->setSubject($this->subject);
    10     $payRequestBuilder->setOutTradeNo($this->out_trade_no);
    11     $payRequestBuilder->setTotalAmount($this->total_amount);
    12     $payRequestBuilder->setTimeExpress($this->timeout_express);
    13     $payResponse = new AlipayTradeService($config);
    14     $result=$payResponse->wapPay($payRequestBuilder,$this->return_url,$this->notify_url);
    15         
    16     return $result;
    17 }

    正常的话把上面返回结果输出页面就可以了,微信公众号里面就要稍作处理,这里参考官网demo,我使用了post请求,因为上述返回结果直接就是一个form表单提交,所以就把返回结果中js部分去掉,换用官网demo中js方法,就可以了

    php

    1 $form = $alipay->getResult();
    2 $script = "<script>document.forms['alipaysubmit'].submit();</script>";//form中js部分
    3 $form = substr($form,0,strrpos($form,$script));//将form中js部分去掉
    4 $this->assign('form',$form);
    5 $this->display(":alipay");

    html

    因为form包含所有参数,所以js配置直接把input[type=hidden]获取到就行,另外form的id需要改为alipaysubmit,和返回数据一致

     1 <div id="pay-methods-panel" class="pay-methods-panel">
     2     {$form}
     3     <div class="wrapper buy-wrapper">
     4         <a href="javascript:void(0);" class="J-btn-submit btn mj-submit btn-strong btn-larger btn-block">确认支付</a>
     5     </div>
     6 </div>
     7 <script type="text/javascript" src="themes/simplebootx/Public/assets/js/ap.js"></script>
     8 <script>
     9     var btn = document.querySelector(".J-btn-submit");
    10     btn.addEventListener("click", function (e) {
    11         e.preventDefault();
    12         e.stopPropagation();
    13         e.stopImmediatePropagation();
    14         var queryParam = '';
    15                                  Array.prototype.slice.call(document.querySelectorAll("input[type=hidden]")).forEach(function (ele) {
    16                    queryParam += '&' + ele.name + "=" + encodeURIComponent(ele.value);
    17             });
    18         var gotoUrl = document.querySelector("#alipaysubmit").getAttribute('action') + queryParam;
    19          _AP.pay(gotoUrl);
    20 
    21         return false;
    22     }, false);
    23 </script>

    还有几点要注意,ap.js中location.href要配置正确,pay.htm的ap.js要引用对

    另外api版本要弄对,我用的最新api,但官网解决方法demo应该是老版本的,因为js参数配置都不一样,按照demo中js配置参数不好使好在我这种方式直接忽略掉了这种问题

    好了就到这里,我是懒人懒办法,不过感觉挺省事的,欢迎大家有问题讨论

  • 相关阅读:
    Balanced Binary Tree
    Convert Sorted List to Binary Search Tree
    Convert Sorted Array to Binary Search Tree
    Binary Tree Zigzag Level Order Traversal
    Validate Binary Search Tree
    Binary Tree Level Order Traversal II
    Binary Tree Level Order Traversal
    Maximum Depth of Binary Tree
    如何把U盘的两个盘或者多个盘合成一个
    bugku 想蹭网先解开密码
  • 原文地址:https://www.cnblogs.com/YearsOfDrunk/p/9581519.html
Copyright © 2011-2022 走看看