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']);
这样就好了。