php tp5支付宝app支付,支付宝APP支付 统一下单 php服务端 tp5

这篇博客主要介绍了如何在PHP环境中调用支付宝的App支付接口进行支付请求,并处理支付成功的回调通知。首先,加载必要的支付宝SDK,设置appid、私钥、公钥等配置。然后,构造支付请求参数,包括商品描述、订单号、金额等,并发送支付请求。支付成功后,支付宝会回调指定的notify_url,博客中展示了如何验证回调数据的正确性,更新订单状态,并处理后续业务逻辑。
摘要由CSDN通过智能技术生成

{

$data = input(‘post.‘);

Loader::import(‘/alipay/aop/AopClient‘,EXTEND_PATH);

$aop = new \AopClient();

$aop->appId = config("alipay_app_id");

$aop->rsaPrivateKey = config(‘alipay_private_key‘);

$aop->alipayrsaPublicKey = config(‘alipay_public_key‘);//对应填写

$aop->signType = "RSA2";

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

Loader::import(‘/alipay/aop/request/AlipayTradeAppPayRequest‘,EXTEND_PATH);

$request = new \AlipayTradeAppPayRequest();

//SDK已经封装掉了公共参数,这里只需要传入业务参数

$bizcontent = json_encode(array(

‘body‘ => $data[‘body‘], //商品描述

‘subject‘ => $data[‘title‘], //支付的标题,

‘out_trade_no‘ => $data[‘ordernum‘], //支付宝订单号必须是唯一的,只能生成一次

‘total_amount‘ => $data[‘money‘], //金额

"timeout_express" => "30m", //订单支付有效时间 m分钟 h小时

‘product_code‘ => ‘QUICK_MSECURITY_PAY‘

));

$request->setNotifyUrl("http://tapi.zuozuobang.com/notifyurl");//你在应用那里设置的异步回调地址

$request->setBizContent($bizcontent);

//这里和普通的接口调用不同,使用的是sdkExecute

$response = $aop->sdkExecute($request);

//htmlspecialchars是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题

/* echo htmlspecialchars($response);*///就是orderString 可以直接给客户端请求,无需再做处理。

if($response){

return_msg(‘200‘,‘支付宝请求成功!‘,$response);

}else{

return_msg(‘100‘,‘支付请求失败!‘,$response);

}

}

/*

* 支付宝支付回调

*/

public function notifyurl()

{

Loader::import(‘/alipay/aop/AopClient‘,EXTEND_PATH);

$aop = new \AopClient();

$aop->alipayrsaPublicKey =config(‘alipay_public_key‘);//对应填写

$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‘]; //交易状态trade_status

$total_amount = $_POST[‘total_amount‘]; //订单的实际金额

$order = Db::table("shfw_order")->where(‘ordernum‘, $out_trade_no)->find();

if ($order) {

//只有交易通知状态为TRADE_SUCCESS或TRADE_FINISHED时,支付宝才会认定为买家付款成功。

if ($trade_status != ‘TRADE_FINISHED‘ && $trade_status != ‘TRADE_SUCCESS‘) {

return ‘fail‘;

}

//2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额);

if ($total_amount != $order[‘money‘]) {

return ‘fail‘;

}

//校验成功后在response中返回success,校验失败返回failure

$update = array(

‘status‘ => ‘2‘, //修改支付状态

‘zhi_time‘ => time(), //添加支付时间

‘pay_type‘ => 1); //添加支付类型

$result = Db::table("shfw_order")->where(‘ordernum‘, $out_trade_no)->update($update);

$res = Db::table("shfw_order")->where(‘ordernum‘, $out_trade_no)->field(‘id,mid,ordernum,nickname,addtime,pay_type‘)->find();

// $member = Db::table(‘shfw_member‘)->where(‘id‘,$res[‘mid‘])->find();

//添加充值记录

$res[‘payorder‘] = $trade_no;

$res[‘money‘] = $total_amount;

$addpay = $this->addpay($res);

if ($result && $addpay) {

return "success";

} else {

return ‘fail‘;

}

} else {

exit(‘fail‘);

}

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值