php里面怎么添加微信支付宝支付宝支付,PHP开发之微信公众号中进行支付宝支付...

想必很多人都有过要在微信公众号中进行支付宝支付的经历,但是微信又屏蔽了阿里系所有的东西,网上百度了很多,都没有完整的解决方案,可谓万坑丛中过啊。刚刚踩完坑的袁小威就迫不及待的分享给大家咯。

切入正题,其实支付宝官方就微信公众号中使用支付宝支付是给出了解决方案的【微信公众平台无法使用支付宝收付款的解决方案】,有DEMO可供下载下载参考,因此,袁小威基于官方提供的DEMO来实现了微信公众号中进行支付宝支付。

调用支付宝手机网站支付服务端SDK部分可以下载官方DEMO来实现【各语言服务端SDK】,首先在支付配置文件config.php里配置好自己的参数,然后创建支付类:alipayMobile.class.php,调用手机网站支付接口,话不多说,直接上代码:

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);

//付款金额,必填

$total_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->setTotalAmount($total_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操作,这个操作是在你调用支付接口后直接跳转支付宝方的支付页的,这对我们后面做微信公众号中支付宝支付是一个大坑(亲测),一定要注释掉这一行代码哟!

然后就是支付请求getPay方法了(此处分享已经去掉接口验证等系列代码逻辑):

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就该起作用了:

######首先要在页面里引入js文件:ap.js;

######其次,要将pay.htm文件放到项目目录下(文件中引入ap.js文件的路径要确认是否正确,以及最后执行_AP.decode返回错误里pay.htm#error要写pay.htm的访问url,如:http://examp.com/mobile/pay/pay.htm#error);

######然后,在支付请求成功后对接收到的数据进行处理:

//接收支付请求成功后返回的数据

var datas = data.result;

//截取,去掉后面script中自动提交表单部分代码后插入到页面

$("#paywindow").append(datas.split('')[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以及确保路径正确,不然不会成功。

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

AAffA0nNPuCLAAAAAElFTkSuQmCC

AAffA0nNPuCLAAAAAElFTkSuQmCC

AAffA0nNPuCLAAAAAElFTkSuQmCC

好了,一点点菜鸟心得,有不当之处欢迎留言指证交流,一起成长,喵,就是这样!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值