今天来介绍一下支付宝的APP支付吧,首先要去蚂蚁金服注册个账号,这个不用多说了。然后再创建一个应用,这个也不用说了。不过有一点,须将应用上线后才可以签约APP支付,不然你会发现等了半年发现签约还没下来~~~
一系列的流程下来后,你会得到一个APPID
首先说一下环境配置问题吧
第一个配置支付宝网关是固定的:https://openapi.alipay.com/gateway.do
第二个配置和第三个配置原则上是可以一样的:可以填上你的支付完成回调地址
再说下接口加签方式,这个环节是必不可少的。
支付宝为我们提供了一个生成秘钥的工具,我们可以下载他来生成,然后复制到蚂蚁金服开发者平台上。
打开工具,我们选择非JAVA适用的 和密钥长度为2048的,这时会自动给我们生成一串商户应用私钥和商户应用公钥(记住他们的名字,哈哈)
这个时候就把你刚刚生成的商户应用公钥(名字别搞错了)放到蚂蚁金服开发者平台上面
这个时候蚂蚁金服会帮你生成一个支付宝公钥,记住这个名字,配置要用到。
接下来就可以开始走我们的支付流程了,哦,忘记了API的下载地址了~
这个是服务端SDK下载地址,选择PHP就OK了,https://docs.open.alipay.com/54/103419/
下面就开始我们的代码~~~~~~~~~
首先说一下配置
return [
'ALI_CONFIG' => array(
'gatewayUrl' => 'https://openapi.alipay.com/gateway.do',//支付宝网关(固定)'
'appId' => '',//APPID即创建应用后生成
'seller_id' => '这个是可以在蚂蚁金服开发者中心的右上角查看账户信息中获得,在角色身份那一栏,PID就是',
//由开发者自己生成: 请填写开发者私钥
'rsaPrivateKey' => '这个是你使用工具自己生成的商户私钥',
//支付宝公钥,由支付宝生成: 请填写支付宝公钥,一行字符串
'alipayrsaPublicKey' => '记住这里是支付宝公钥不是应用公钥',
'notifyUrl' => '这里要跟你在蚂蚁金服配置的回调地址一样', // 支付成功通知地址
),
];
public function app_pay($order_id){
//导入支付宝类
Vendor('Alipay.aop.AopClient');
Vendor('Alipay.aop.request.AlipayTradeAppPayRequest');
$aop = new \AopClient();
$aliConfig = C('ALI_CONFIG');
//配置基本参数
//网关
$aop->gatewayUrl = $aliConfig['gatewayUrl'];
//appid
$aop->appId = $aliConfig['appId'];
//开发者私钥
$aop->rsaPrivateKey = $aliConfig['rsaPrivateKey'];
//支付宝公钥
$aop->alipayrsaPublicKey=$aliConfig['alipayrsaPublicKey'];
$aop->apiVersion = '1.0';固定参数
$aop->postCharset='utf-8';固定参数
$aop->format='json';固定参数
$aop->signType='RSA2';固定参数
//商户订单编号
$out_trade_no = $order_id;商家自己生成的订单id
//描述
$body = 'test';
//标题
$subject = 'test';
//查询订单价格,支付宝的价格和微信的有所不同,如果是1元的话就是1.00,10元的话就是10.00
$order_amount = number_format($money, 2);
$request = new \AlipayTradeAppPayRequest();
$bizContent = "{" .
" \"body\":\"$body.\"," .
" \"subject\":\"$subject\"," .
" \"out_trade_no\":\"$out_trade_no\"," .
" \"timeout_express\":\"30m\"," .
" \"total_amount\":$order_amount," .
" \"product_code\":\"QUICK_WAP_WAY\"" .
" }";
//异步回调地址
$request->setNotifyUrl($aliConfig['notifyUrl']);
发送数据内容到支付宝
$request->setBizContent($bizContent);
$response = $aop->sdkExecute($request);
if($response){
return $response;返回这一大串给前端就完成的支付宝APP支付的调用
}
}
接下来就说下回调(其实如下代码都是固定,只是修改订单状态的那一栏大家会有所不同,毕竟不同人有不同的习惯)
public function alinotify(){
//导入支付宝类
Vendor('Alipay.aop.AopClient');
$aop = new \AopClient;
$aop->alipayrsaPublicKey = C('ALI_CONFIG')['alipayrsaPublicKey'];
$flag = $aop->rsaCheckV1($_POST, NULL, "RSA2");
if($flag){
//商户订单号
$out_trade_no = $_POST['out_trade_no'];
//支付宝交易号
$trade_no = $_POST['trade_no'];
//交易状态
$trade_status = $_POST['trade_status'];
//订单的实际金额
$total_amount = $_POST['total_amount'];
//appid
$appid = $_POST['app_id'];
$seller_id = $_POST['seller_id'];
//验证app_id是否为商户本身
if($appid != C('ALI_CONFIG')['appId']){
exit('fail');
}
//判断交易通知状态是否为TRADE_SUCCESS或TRADE_FINISH
if($trade_status!='TRADE_FINISH' && $trade_status !='TRADE_SUCCESS'){
exit('fail');
}
//验证订单的准确性
if(!empty($out_trade_no)){
//在这里可以通过返回的商家订单号查询出该订单的信息
$res = xxx;
if(!$res){
exit('fail');
}
//判断total_amount是否确实为该订单的实际金额
if($total_amount != $res){
exit('fail');
}
//判断seller_id是否与商户的id相同
if($seller_id != C('ALI_CONFIG')['seller_id']){
exit('fail');
}
}
//全部验证成功后修改订单状态
doAliPay方法用于进行修改订单状态的逻辑,可以放手发挥了
$data = $this->doAliPay($out_trade_no,$trade_no);
if($data){
//处理业务逻辑
echo 'success';
} else {
echo 'fail';
}
} else {
echo 'fail';
}
}
就是这么简单的过程~送给各位学习TP的小伙伴