解决apiclode alipay模块 app支付宝支付问题

app 支付宝支付流程:

先去蚂蚁支付 下载支付宝php  demo:  https://docs.open.alipay.com/54/106370/

apiclode支付 alipay模块地址:https://docs.apicloud.com/Client-API/Open-SDK/aliPay

支付时,主要所以app配置要完成好,app支付完成后,跳回到原app需要apiclode中的app框架壳子,具体看文档。

**************************************************************调用支付宝请求方法**********************************************
require "AopSdk.php";
require "aop/AopClient.php";
require 'aop/request/AlipayTradeAppPayRequest.php';

// 开启错误提示
// ini_set("display_errors","On");
// error_reporting(E_ALL);

//初始化配置
******调用授权接口alipay.wap.trade.create.direct获取授权码token**************************

//服务器异步通知页面路径
$notify_url = "http://".$_SERVER['HTTP_HOST']."/mobile/apiclode/ajax_url.php";
//需http://格式的完整路径,不允许加?id=123这类自定义参数

//商户订单号
$out_trade_no = $_GET['out_trade_no'];

//商户网站订单系统中唯一订单号,必填\
$order_sn = isset($_GET['order_sn']) ? $_GET['order_sn'] : '';
//订单名称
$subject = "订单号:".$order_sn;
//必填

//付款金额
$total_fee = $_GET['total_fee'];

$c = new AopClient;
$c->gatewayUrl = "https://openapi.alipay.com/gateway.do";

// 申请的appid
$c->appId = xxxxxxxxx;

// 蚂蚁平台申请的私钥
$c->rsaPrivateKey =  私钥 ;
$c->format = "json";
$c->charset= "utf-8";
$c->signType= "RSA2";

// 蚂蚁平台申请的公钥
$c->alipayrsaPublicKey = 公钥;

//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
$request = new AlipayTradeAppPayRequest();

$body = 'xxx';
$expire = '30';
$pre_price = "0.01";
//SDK已经封装掉了公共参数,这里只需要传入业务参数
$bizcontent = "{\"body\":\"{$body}\"," //支付商品描述
  . "\"subject\":\"{$subject}\"," //支付商品的标题
  . "\"out_trade_no\":\"{$out_trade_no}\"," //商户网站唯一订单号
  . "\"timeout_express\":\"{$expire}m\"," //该笔订单允许的最晚付款时间,逾期将关闭交易
  . "\"total_amount\":\"{$pre_price}\"," //订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]
  . "\"product_code\":\"QUICK_MSECURITY_PAY\""
  . "}";

$request->setNotifyUrl($notify_url);
$request->setBizContent($bizcontent);

//这里和普通的接口调用不同,使用的是sdkExecute
$response   = $c->sdkExecute($request);

$smarty->assign('order_info', $response);
//必填
$smarty->display('aliapi_index.html');

********************************************************以上是你调用支付宝请求方法**********************************************

*******************************************************调用支付宝支付界面 前端页面start**********************************************

aliapi_index.html  只写body

<body style='background:#EDEDED;'>
    <div id="wrap">
        <div id="main" class='center'>
            <img id='loading' src='../../images/money.png' width=100 height=100>
        </div> 
        <p class="paying">正在支付...</p>
    </div>
</body>
<script type="text/javascript" src="../../apiclode/widget/script/api.js"></script>
<script type="text/javascript">
    var orderInfo = "{$order_info}";
    apiready = function() {
        var aliPay = api.require('aliPay');
        aliPay.payOrder({
            orderInfo: orderInfo
        }, function(ret, err) {
            var url = window.location.host;
            window.location.href='http://'+url+'/mobile/apiclode/result_url.php?result='+ret.code;
            
        });
    };
</script>

*******************************************************调用支付宝支付界面 前端页面end**********************************************

*******************************************************回调函数使用,处理后台订单状态**********************************************

ajax_url.php
//---------------------支付宝回调-------------------
require "AopSdk.php";
require "aop/AopClient.php";
require('../includes/lib_payment.php');
//验证签名
$aop = new AopClient();
$aop->alipayrsaPublicKey = 公钥;

// 支付宝返回的fund_bill_list 被转义,此时转义回来
$fund_bill_list = stripslashes($_POST['fund_bill_list']);
$_POST['fund_bill_list'] = $fund_bill_list;
$flag = $aop->rsaCheckV1($_POST, NULL, "RSA2");
$result = $flag ? 'true' : "false";

file_put_contents("./error-log.txt", date("Y-m-d H:i:s") . "-----" . $result ."\r\n" , FILE_APPEND);
if ($flag) {
//验签
 //处理业务,并从$_POST中提取需要的参数内容
 if($_POST['trade_status'] == 'TRADE_SUCCESS' || $_POST['trade_status'] == 'TRADE_FINISHED'){//处理交易完成或者支付成功的通知
    //获取订单号
    $out_trade_no     = $_POST['out_trade_no'];
    //交易号
    $trade_no         = $_POST['trade_no'];
    //订单支付时间
    $gmt_payment     = $_POST['gmt_payment'];
    //转换为时间戳
    $gtime = strtotime($gmt_payment);
    //此处编写回调处理逻辑
    xxxxxxxxxx
    //处理成功一定要返回 success 这7个字符组成的字符串,
    die('success');//响应success表示业务处理成功,告知支付宝无需在异步通知
    
 }

}
 

支付宝支付有个问题,需要注意,那就是 异步回调函数中,返回的 信息[{\"amount\":\"0.01\",\"fundChannel\":\"ALIPAYACCOUNT\"}]   注意,此处有 反斜杠,支付宝返回的本身就有反斜杠,这时候确认2点:1、是否环境内配置了专一,2、如果没有,你要对支付宝返回的 字段进行转义   $fund_bill_list = stripslashes($_POST['fund_bill_list']);

这样就好了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值