• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
岁月佳醉
Years are drunk, the longer the fragrance
博客园    首页    新随笔    联系   管理    订阅  订阅

微信公众平台无法使用支付宝收付款的解决方案

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

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

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

ap.js和pay.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配置参数不好使,好在我这种方式直接忽略掉了这种问题

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

posted @ 2018-09-03 22:19  疯狂の熊猫  阅读(333)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3