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

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

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

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

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

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

public function getResult()
{
	vendor('AliPay.wappay.service.AlipayTradeService');
	vendor('AliPay.wappay.buildermodel.AlipayTradeWapPayContentBuilder');
	$config = C('AliPayConf');
	
	$payRequestBuilder = new \AlipayTradeWapPayContentBuilder();
	$payRequestBuilder->setBody($this->body);
	$payRequestBuilder->setSubject($this->subject);
	$payRequestBuilder->setOutTradeNo($this->out_trade_no);
	$payRequestBuilder->setTotalAmount($this->total_amount);
	$payRequestBuilder->setTimeExpress($this->timeout_express);
	$payResponse = new \AlipayTradeService($config);
	$result=$payResponse->wapPay($payRequestBuilder,$this->return_url,$this->notify_url);
		
	return $result;
}

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

php

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

html

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

<div id="pay-methods-panel" class="pay-methods-panel">
    {$form}
    <div class="wrapper buy-wrapper">
        <a href="javascript:void(0);" class="J-btn-submit btn mj-submit btn-strong btn-larger btn-block">确认支付</a>
    </div>
</div>
<script type="text/javascript" src="themes/simplebootx/Public/assets/js/ap.js"></script>
<script>
    var btn = document.querySelector(".J-btn-submit");
    btn.addEventListener("click", function (e) {
        e.preventDefault();
        e.stopPropagation();
        e.stopImmediatePropagation();
        var queryParam = '';
                                 Array.prototype.slice.call(document.querySelectorAll("input[type=hidden]")).forEach(function (ele) {
               	queryParam += '&' + ele.name + "=" + encodeURIComponent(ele.value);
            });
        var gotoUrl = document.querySelector("#alipaysubmit").getAttribute('action') + queryParam;
         _AP.pay(gotoUrl);

        return false;
    }, false);
</script>

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

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

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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值