最近在做一个app的项目,使用的是HBuilder+mui,使用了一段时间不得不说真的是很好用,而且开发也十分简单,虽然赶不上原生app但是开发速度快啊,哈哈,其中遇到集成支付宝app支付的问题,在官方看到的是如下的说明:
开发指导
支付流程如下:

plus API使用步骤:
1. 调用plus.payment.getChannels()获取系统支持的支付通道;
2. 调用plus.payment.request()发起支付请求。
示例代码
var channel=null; // 1. 获取支付通道 function plusReady(){ // 获取支付通道 plus.payment.getChannels(function(channels){ channel=channels[0]; },function(e){ alert("获取支付通道失败:"+e.message); }); } document.addEventListener('plusready',plusReady,false); var ALIPAYSERVER='http://demo.dcloud.net.cn/helloh5/payment/alipay.php?total='; var WXPAYSERVER='http://demo.dcloud.net.cn/helloh5/payment/wxpay.php?total='; // 2. 发起支付请求 function pay(id){ // 从服务器请求支付订单 var PAYSERVER=''; if(id=='alipay'){ PAYSERVER=ALIPAYSERVER; }else if(id=='wxpay'){ PAYSERVER=WXPAYSERVER; }else{ plus.nativeUI.alert("不支持此支付通道!",null,"捐赠"); return; } var xhr=new XMLHttpRequest(); xhr.onreadystatechange=function(){ switch(xhr.readyState){ case 4: if(xhr.status==200){ plus.payment.request(channel,xhr.responseText,function(result){ plus.nativeUI.alert("支付成功!",function(){ back(); }); },function(error){ plus.nativeUI.alert("支付失败:" + error.code); }); }else{ alert("获取订单信息失败!"); } break; default: break; } } xhr.open('GET',PAYSERVER); xhr.send(); }
注:第二步中获取到的订单数据需要在服务器通过支付宝平台获取PID和密钥生成。
HBuilder应用配置
分享插件添加方法具体步骤如下:1. 点击manifest.json文件的“代码视图”,在permissions节点下添加Payment节点:

在plus -> distribute -> plugins 节点下添加payment节点:

alipay节点下配置支付宝相关信息
scheme值为iOS平台调用支付宝的“快捷支付”应用返回时用到的标识,推荐使用小写字符串。
weixin节点下配置微信支付相关信息
appid值为在微信开放平台申请应用的AppID值。
appleiap节点下配置苹果应用内支付相关信息
在HBuilder基座中无法使用此支付通道,需要提交云端打包才可使用。
=====================分割线=====================
从Dcloud下载的新版的支付宝app支付sdk演示:

其中index.php的代码是:
<?php header('Access-Control-Allow-Origin: *'); header('Content-type: text/plain'); require_once 'aop/AopClient.php'; require_once 'aop/request/AlipayTradeAppPayRequest.php'; // 获取支付金额 $amount=''; if($_SERVER['REQUEST_METHOD']=='POST'){ $amount=$_POST['total']; }else{ $amount=$_GET['total']; } $total = floatval($amount); if(!$total){ $total = 1; } $aop = new AopClient; $aop->gatewayUrl = "https://openapi.alipay.com/gateway.do"; $aop->appId = "app_id"; $aop->rsaPrivateKey = '请填写开发者私钥去头去尾去回车,一行字符串'; $aop->format = "json"; $aop->charset = "UTF-8"; $aop->signType = "RSA2"; $aop->alipayrsaPublicKey = '请填写支付宝公钥,一行字符串'; //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay $request = new AlipayTradeAppPayRequest(); // 异步通知地址 $notify_url = urlencode('商户外网可以访问的异步地址'); // 订单标题 $subject = 'DCloud项目捐赠'; // 订单详情 $body = 'DCloud致力于打造HTML5最好的移动开发工具,包括终端的Runtime、云端的服务和IDE,同时提供各项配套的开发者服务。'; // 订单号,示例代码使用时间值作为唯一的订单ID号 $out_trade_no = date('YmdHis', time()); //SDK已经封装掉了公共参数,这里只需要传入业务参数 $bizcontent = "{\"body\":\"".$body."\"," . "\"subject\": \"".$subject."\"," . "\"out_trade_no\": \"".$out_trade_no."\"," . "\"timeout_express\": \"30m\"," . "\"total_amount\": \"".$total."\"," . "\"product_code\":\"QUICK_MSECURITY_PAY\"" . "}"; $request->setNotifyUrl($notify_url); $request->setBizContent($bizcontent); //这里和普通的接口调用不同,使用的是sdkExecute $response = $aop->sdkExecute($request); // 注意:这里不需要使用htmlspecialchars进行转义,直接返回即可 echo $response; ?>看起来是没什么问题的,就按照配置以及实例写了,但是发现收不到回调,也就是说支付成功之后支付宝没有下发支付状态的通知到指定的服务器,使用postman做了回调的测试可以正常访问,也能正常处理订单,但是就是无法收到回调,目前遇到这个问题
检查了一段时间,发现按照上方的例子写的时候 notify_url 做了urlencode正常来说没问题,但是无论如何都无法正常,于是去掉了urlencode发现竟然可以了,时间关系没有做深入的排查,推测可能是重复编码造成的,既然问题解决了之后注意就是

我的微信:graent_hu
欢迎扫码加我和微信好友,有什么问题我们可以一起探讨,有什么需要也随时欢迎发消息给我~
转载请注明出处:
本文标题:使用HBuilder+mui集成支付宝app支付遇到的一些问题和处理办法
本文链接:https://www.wlyc.cn/post-165.html
发表评论