PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了PHP开发之微信公众号中进行支付宝支付(二)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

想必很多人都有过要在微信公众号中进行支付宝支付的经历,但是微信又屏蔽了阿里系所有的东西,网上百度了很多,都没有完整的解决方案,可谓万坑丛中过啊。刚刚踩完坑的袁小威就迫不及待的分享给大家咯。 @H_696_1@切入正题,其实支付宝官方就微信公众号中使用支付宝支付是给出了解决方案的【微信公众平台无法使用支付宝收付款的解决方案】,有DEMO可供下载下载参,因此,袁小威基于官方提供的DEMO来实现了微信公众号中进行支付宝支付。 @H_696_1@调用支付宝手机网站支付服务端SDK部分可以下载官方DEMO来实现【各语言服务端SDK】,首先在支付配置文件config.PHP里配置好自己的参数,然后创建支付类:alipaymobile.class.PHP调用手机网站支付接口,话不多说,直接上代码:@H_696_1@@H_696_1@@H_696_1@

class alipaymobile
{
         /**
     * 生成支付代码
     * @param   array   $order    订单信息
     * @param   array   $bodys    订单名称、描述
     */
    function get_code($order,$bodys)
    {
             require_once dirname ( __FILE__ ).DIRECTORY_SEPARATOR.'wappay/service/AlipayTradeservice.PHP';
             require_once dirname ( __FILE__ ).DIRECTORY_SEPARATOR.'wappay/buildermodel/AlipayTradeWapPayContentBuilder.PHP';
             require dirname ( __FILE__ ).DIRECTORY_SEPARATOR.'./config.PHP';
            //商户订单号,商户网站订单系统中唯一订单号,必填
            $out_Trade_no = $order['order_sn'];
            //订单名称,必填
            $subject = urlencode($bodys);
            //付款金额,必填
            $@R_701_10586@l_amount = $order['order_amount'];
            //商品描述,可空
            $body = urlencode($bodys);
            //超时时间
            $timeout_express="1m";
            $payrequestBuilder = new AlipayTradeWapPayContentBuilder();
            $payrequestBuilder->setBody($body);
            $payrequestBuilder->setSubject($subject);
            $payrequestBuilder->setOutTradeNo($out_Trade_no);
            $payrequestBuilder->set@R_701_10586@lamount($@R_701_10586@l_amount);
            $payrequestBuilder->setTimeExpress($timeout_express);
            $payResponse = new AlipayTradeservice($config);
            $result=$payResponse->wapPay($payrequestBuilder,$config['return_url'],$config['notify_url']);
            return $result;
    }
}

注:这里有一个需要注意,在官方SDK的wappay/service/AlipayTradeservice.PHP的aopclientrequestExecute方法中,有一个echo $result操作,这个操作是在你调用支付接口后直接跳转支付宝方的支付页的,这对我们后面做微信公众号中支付宝支付是一个大坑(亲测),一定要注释掉这一行代码哟!@H_696_1@然后就是支付请求getPay方法了(此处分享已经去掉接口验证等系列代码逻辑):@H_696_1@@H_696_1@

public function getPay(){
    //1.引入支付类文件
    include_once "plugins/Payment/alipay/alipaymobile.class.PHP";
    $payment = new \alipaymobile();
    $order_id = I('order_id');
    //2.判断参数是否为空
    if (!empty($order_id)){
        //3.根据订单id查询订单是否存在
        $order = M('Order')->where(array('id'=>$order_id))->find();
        if ($order){//订单存在
            //4.判断该笔订单是否已经支付,如已支付则返回支付失败并给出相应提示
            if ($order['pay_status'] == '1'){
                exit(json_encode(array('status'=>'205','msg'=>'该订单已支付,请勿重复提交!')));
            }
            $bodys = '订单:'.$order['order_sn'] . '支付';
            //5.调用支付类中封装的支付方法并对应传参
            $result = $payment->get_code($order,$bodys);
            //6.返回result中的参数给前端
            exit(json_encode(array('status'=>'0','msg'=>'操作成功','result'=>$result))); 
        }else{
            //报错:数据不存在
            exit(json_encode(array('status'=>'-200','msg'=>'订单不存在,请核实后再提交!')));
        }
    }else{
        //报错:缺少参数
        exit(json_encode(array('status'=>'-204','msg'=>'参数缺失,请核实!')));
    }
}

Ok,接下来本次分享的重点来了哟,前端接收到返回的数据后,需要做一些小处理,这里刚刚下载的官方的解决方案DEMO就该起作用了:@H_696_1@首先要在页面里引入js文件:ap.js;@H_696_1@其次,要将pay.htm文件放到项目目录下(文件中引入ap.js文件的路径要确认是否正确,以及最后执行_AP.decode返回错误里pay.htm#error要写pay.htm的访问url,如:http://examp.com/mobile/pay/pay.htm#error);@H_696_1@然后,在支付请求成功后对接收到的数据进行处理:@H_696_1@@H_696_1@

//接收支付请求成功后返回的数据
var datas = data.result;
//截取,去掉后面script中自动提交表单部分代码后插入到页面
$("#paywindow").append(datas.split('</form>')[0]);
//开始拼接url参数
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.js方法
_Ap.pay(gotoUrl);
注:支付发起页和pay.htm页面一定要引入ap.js以及确保路径正确,不然不会成功。

至此,我们可以愉快的在微信公众号中进行支付宝支付了。 

 

转载:https://blog.csdn.net/joelingwei/article/details/81019993

大佬总结

以上是大佬教程为你收集整理的PHP开发之微信公众号中进行支付宝支付(二)全部内容,希望文章能够帮你解决PHP开发之微信公众号中进行支付宝支付(二)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: