PHP 记录一下服务端APP支付宝支付

该博客详细介绍了如何在PHP服务端集成并使用支付宝的APP支付接口。通过引入必要的SDK文件,设置订单信息,调用AopClient进行签名和请求参数的构造,实现了支付预订单的生成。同时,提供了异步通知处理函数aliPay_notify,用于验证支付宝的回调数据并处理支付成功后的业务逻辑。
摘要由CSDN通过智能技术生成

PHP 服务端支付宝支付

<?php

namespace app\api\controller;

use app\common\master\Task;
use app\common\user\User;
use app\common\user\UserGoodsLog;
use app\common\web\Goods;
use app\common\web\Order;
use think\Controller;
use think\Db;
use think\facade\Env;

//引入必要文件
require Env::get('root_path') . 'extend/aop/AopClient.php';
require Env::get('root_path') . 'extend/aop/request/AlipayTradeAppPayRequest.php';

class AliPay extends Controller
{
    function getPrePayOrder($body, $order_sn, $total_fee)
    {
        header("Content-type:text/html;charset=utf-8");
        // 调用支付宝配置文件
        $API = config('sf_config.alipay_config');
        //构造业务请求参数的集合(订单信息)
        $content = array();
        $content['subject'] = $body;                 // 商品标题
        $content['body'] = 'APP支付';  // 商品描述 非必须
        $content['out_trade_no'] = $order_sn;         // 订单号
        $content['total_amount'] = $total_fee;       // 要求必须为浮点型,订单金额
        $content['product_code'] = "QUICK_MSECURITY_PAY";            //销售产品码,固定值
        $con = json_encode($content);                                 //$content是biz_content的值,将之转化成json字符串
        //公共参数
        $Client = new \AopClient();                 //实例化支付宝sdk里面的AopClient类,下单时需要的操作,都在这个类里面
        $param = array();
        $param['app_id'] = $API['appid'];         //支付宝分配给开发者的应用ID
        $param['method'] = $API['method'];         //接口名称
        $param['charset'] = $API['charset'];       //请求使用的编码格式
        $param['sign_type'] = $API['sign_type'];   //商户生成签名字符串所使用的签名算法类型
        $param['timestamp'] = date("Y-m-d H:i:s");   //发送请求的时间
        $param['version'] = $API['version'];       //调用的接口版本,固定为:1.0
        $param['notify_url'] = request()->domain() . '/api.php/AliPay_notify.json'; //支付宝服务器主动通知地址
        $param['biz_content'] = $con;              //业务请求参数的集合,长度不限,json格式
        $paramStr = $Client->getSignContent($param);//组装请求签名参数  到此步目前没有问题
        $sign = $Client->alonersaSign($paramStr, $API['rsaPrivateKey'], 'RSA2'); //生成签名
        $param['sign'] = $sign;
        $str = $Client->getSignContentUrlencode($param);       //最终请求参数
        return $str;
    }

    public function aliPay_notify()
    {
        $_POST = $_REQUEST;
        if ($_POST == null) {
            $_POST = file_get_contents("php://input");
        }
        if ($_POST == null) {
            $_POST = isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] : '';
        }
        file_put_contents("ali_back.txt", file_get_contents("php://input"));
        //验证签名
        $aop = new \AopClient;
        $aop->alipayrsaPublicKey = config('sf_config.alipay_config.alipayrsaPublicKey');
        $flag = $aop->rsaCheckV1($_POST,$aop->alipayrsaPublicKey, "RSA2");
//        file_put_contents("ali_back2.txt", $flag);
//        file_put_contents("ali_back3.txt", $_POST);
        //验签
//        if ($flag) {
//            file_put_contents("ali_back4.txt", '我进来了');
            //处理业务,并从$_POST中提取需要的参数内容
            if ($_POST['trade_status'] == 'TRADE_SUCCESS' || $_POST['trade_status'] == 'TRADE_FINISHED') {
            //处理交易完成或者支付成功的通知
     
                    die('success');//响应success表示业务处理成功,告知支付宝无需在异步通知
                } else {//已支付 或者不能再支付
                    die('success');//响应success表示业务处理成功,告知支付宝无需在异步通知
                }
            }
//        }
    }
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是誰萆微了承諾

你的鼓励是对我最大的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值