本文最后更新于 2023-12-16,文章内容可能已经过时,请注意发布时间。


title: 开发小说支付两种支付方式代码以及bug还有调试
id: 61fea59a-ba35-4e85-bb37-b8848da15dea
date: 2023-12-11 00:41:25
auther: liqi
excerpt: PHP对接支付 alipay支付 踩过的坑 注意事项(以下接口参数针对的是沙箱环境): 1、支付结果返回客户端不需要htmlspecialchars php 不需要转义(对于php编译环境而言) 2、统一订单交易接口 :两个商户订单号out_trade_no和支付宝订单号trade_no 虽然是二选
permalink: /archives/690da638-4139-42bd-b4b0-cc5ce7d48033
categories:

  • fu-wu-duan
    tags:
  • thinkphp
  • php

PHP对接支付 alipay支付

踩过的坑
注意事项(以下接口参数针对的是沙箱环境):
1、支付结果返回客户端不需要htmlspecialchars php 不需要转义(对于php编译环境而言)
2、统一订单交易接口 :两个商户订单号out_trade_no和支付宝订单号trade_no 虽然是二选其一,但是两个参数都要传递过去,值可以为空
支付宝官方示例:https://linksprod.alipay.com/message-download/a64ab6d9af98dc1063a826a9az/64ab70cae6851d0637b106be/file
https://linksprod.alipay.com/custom/long-chat-message/a64ab6d9af98dc1063a826a9az/64ab70cae6851d0637b106bb/

请求参数

| 参数 | 类型 | 是否必填 | 最大长度 | 描述 | 示例值 |
| — | — | — |
| out_trade_no | String | 特殊可选 | 64 | | 518999297182663248 |
| trade_no | String | 特殊可选 | 64 | 商户订单号out_trade_no和支付宝订单号trade_no 不能同时为空 | 518999297182663248 |

支付接口:AlipayTradeAppPayRequest

/* app付款接口
     * $order_id 我方订单号
     * $amount 金额  单位元
     * return  string 返给客户端调起支付
     * */
    public function withhold($order_id, $amount){
        if(empty($order_id) || empty($amount)){
            return false;
        }
        /*公共参数*/
        $aop=new AopClient();
        $aop->gatewayUrl='https://openapi.alipaydev.com/gateway.do';  //支付宝网关-沙箱
        $aop->format='json';
        $aop->charset ='UTF-8';
        $aop->signType  ='RSA2';
        $aop->rsaPrivateKeyFilePath=$this->pri_key; //应用私钥-沙箱
        $aop->alipayrsaPublicKey=$this->pub_key;  //支付公钥-沙箱
        $aop->appId='1111111111111111111'; //沙箱配置
        /*必选参数*/
        $postArr['total_amount']=$amount;  //订单总金额  单位元 精确到小数点后两位 取值范围[0.01,100000000]
        $postArr['out_trade_no']=$order_id;  //我方唯一订单号
        $postArr['subject']='沙箱测试商品';  //商品的标题/交易标题/订单标题/订单关键字
        /*可选参数*/
        $postArr['product_code']='QUICK_MSECURITY_PAY'; //销售产品码,商家和支付宝签约的产品码
        $postArr['goods_type']=0; //商品主类型 :0-虚拟类商品,1-实物类商品
        $postJson=json_encode($postArr);
        Yii::info('alipay withhold request is ' . json_encode($postArr), __FUNCTION__);

        $payModel=new AlipayTradeAppPayRequest();
        $payModel->setNotifyUrl($this->pay_notify_url); //回调地址
        $payModel->setBizContent($postJson);
        $response = $aop->sdkExecute($payModel);
        Yii::info('alipay withhold response is ' . json_encode($response), __FUNCTION__);
       /* 同步通知结果返回
        $responseNode = str_replace(".", "_", $payModel->getApiMethodName()) . "_response";
        //return $responseNode; alipay_trade_app_pay_response
        $resultCode = $response->$responseNode->code;
        if(!empty($resultCode)&&$resultCode == 10000){
            return htmlspecialchars($response); //htmlspecialchars php 不需要转义
        } else {
            return false;
        }*/
        return $response;
    }

支付回调接口:

/*异步通知接口*/
    public function aliPayNotify(){
        $post=Yii::$app->request->post();
        Yii::info('alipay aliPayNotify post is ' .$post, __FUNCTION__);
        $aop=new AopClient();
        $aop->alipayrsaPublicKey=$this->pub_key;
        //验证参数签名
        $checkSign=$aop->rsaCheckV1($post,NULL, "RSA2");
        Yii::info('alipay aliPayNotify signResult is ' . $checkSign, __FUNCTION__);
        if($checkSign==false){
            return false;
        }
        //签名验证成功
        if ($post['trade_status'] == 'TRADE_SUCCESS'){
            //交易支付成功  更新订单状态 相关逻辑处理 此处省略
            return true;
        }
        return false;
    }

统一订单交易查询:AlipayTradeQueryRequest

/*
     * 支付宝订单交易查询接口
     * */
    public function withholdQuery($tran){
        if(empty($tran) || empty($tran->transaction_code)){
            return false;
        }
        /*公共参数*/
        $aop=new AopClient();
        $aop->gatewayUrl='https://openapi.alipaydev.com/gateway.do';  //支付宝网关-沙箱
        $aop->format='json';
        $aop->charset ='UTF-8';
        $aop->signType  ='RSA2';
        $aop->rsaPrivateKeyFilePath=$this->pri_key; //应用私钥-沙箱
        $aop->alipayrsaPublicKey=$this->pub_key;  //支付公钥-沙箱
        $aop->appId='111111111111111'; //沙箱配置
        /*必传参数*/
        $postArr['out_trade_no']=$tran->transaction_code; //我方订单号
        $postArr['trade_no']=''; //alipay订单号    二选一其中一个传空过去
        $postJson=json_encode($postArr);

        $queryModel = new AlipayTradeQueryRequest ();
        $queryModel->setBizContent($postJson);
        $response= $aop->execute ($queryModel);
        Yii::info('alipay withholdQuery response is ' . json_encode($response), __FUNCTION__);
        $responseNode = str_replace(".", "_", $queryModel->getApiMethodName()) . "_response";
        $resultCode = $response->$responseNode->code;
        if(!empty($resultCode)&&$resultCode == 10000){
            /*逻辑处理*/
            return true;
        } else {
            return false;
        }
    }

第二种支付 php easysdk支付宝

支付宝官方示例:https://linksprod.alipay.com/custom/long-chat-message/a64abb78e594b20051bd56ebez/64abb9cd2c04e7064b907604/
https://linksprod.alipay.com/message-download/a64abb78e594b20051bd56ebez/64abb9cd2c04e7064b907607/file
由于业务需求生成订单直接返回支付页面这里走的沙箱环境没有走新版沙箱走的老版请勿配置错误信息

支付类配置:Alipay

public static function getOptions()
    {
        $options = new Config();
        $options->protocol = 'https';
        $options->gatewayHost = 'openapi-sandbox.dl.alipaydev.com';
        $options->signType = 'RSA2';
        $options->appId ='2021000122671540';
//        $options->appId = "2021000119661540";
//        $options->appId = '2021000122661430';
        $options->merchantPrivateKey='MIIEowIBAAKCAQEAmVim+QGD3+Ymrmfrwo/bbz/iEN2coy43UXWEgCQBRlfSCTYXu3nmLLxynmYamU4nGAFUsHfn7l+QG1NJ1a8DUL6af3nG5nLbivO6Uyy67aLy/4VEWQR4mqcuHHStboi1I9EpSUqhEYeJ/lbqvg8+6KX3wzpU8CdxMPOlgM0X731q71H6CQM9plZm6HHpPxWXaSNkBjqdPliytC/HFV8cYoymlW7P6/WU+nn7BYvU8x7IT4HP6WF5+GWBHttTLuZqzgsKlSynzSmYdnMPl9KfVkcmgsqH4zxsg9EfE2Kh5JDWXhaDxv1g39kfVJ3DjZRihunu/FddPvqsOHC7cOnk+wIDAQABAoIBAGWrvalDM+hzdBoWlN3++4KbXIvKI1yd+9dqj1tWg/HbsEqjLsECZXYry+Lx15jllE36M+h8163YdndnlYCz9QLIHS9/0jxg0uciCduzwIxmia6Y8WQD7uK7DXuYcJTk1xTUTQdnD7vLndagUiuJeDBQOiGav04rGIVYRddMJB6IhY3luRy/jf1KAshR5l0CipFV/GULFC+Jjd77cJvGueS+Ia/8bxe7b2FvqKpwbgVMh+sNdP+a/8AQMtqRO/ZZIE0AamRGWMyIWP7eUKIWeCEl3ZZIC1nQrBdX2J5LkLDhHj8alioxyRTk6bvMvsJUyb4eFLSUb0McU9ccu2xxOMECgYEA1vunvcFD7sip3wdeITNk5dlfhXM82D5pMyWP8c3tDfXPDymk/KOXPFD+MxJ1iQ0BJiw/dnk+fdWYf/xCLzRPv7qKtXL8jPIKaG3TSyOq8W/RYH+8YxMxZqFtzHX3VB0yMjmuOkkQzRvn2IbZsPgo4f7Z12bLd64/PykFK9sbL2kCgYEAtpp+nsXGjOMkLRadoMpuEwhBibfIAflHlJ9HJ+IjYeZFgdhwld48IiXxRRjzmrG2hh6z6izzCArbmSsO1sdBP6YUPOE8KhwiYjX4NuOU2T2ks4j/ATFxMeftKW6dk5pY94Srp8yiuZLLjhxqV0LYtSNFZ+fhU0TT5NnHsJ49iMMCgYEAkPbhBXNs+3cUFPBC6OBfCR6q6rHqNWbgSTzq84KIdwFpvi+2sSUete1ne8jWuLOsMrFjmd/n47JEQwk3F92OaRrArdn7so8DtadY8zH58xQTe56myagHh80S3Owu+uk1D+kVMvhR+/z1OWy1HkA4USwoeLc4PFujClP+yLPWgQECgYAHyDPHPnSEwpVjGoijNp1UUFDCtsNeWipTyin1KC0L2g1ySDAcIvl7FxTeNf8Dw7kcpChUvY+p8xSCxZP/UUSVmtVX9t1iigppFxW5+R751yeyww7jFSFW2CSCVIWAqd5Kxiuungj9UaU9LDbX+zBTH+qwT/CJZPCG20UoYMYMkwKBgEyxeLLrbAimH5MLeOTV9sALQXTpyxjK9YZ8HCclsUKKMCUYmZiQvOI9JRZ6NhRJCBGLjuTbvRh+NHkaj7D8mEU1Zjsh68rbBPAMTaum26peWTsMU2ar4PO+u94cSYX+lUnJs/jf+WzaYStzpQONpOlqb1z10Ee4bJBfEV8rn0As' ;//使用公钥证书模式,请配置下面两个参数,同时修改ali_public_key为以.crt结尾的支付宝公钥证书路径,如(./cert/alipayCertPublicKey_RSA2.crt)
        $options->alipayPublicKey='MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr18vcFGwuXKl87YcOxEy2B4r6V88m4EGxOhCwcrSeBoGBZhUQ9+sgK0sZpX4Ke4JX1eUeCi/o/pQvFP/exQOn3LPksjCkmOfGAcyuHJH2O/TayfKomvE1e9P2pw0rxxvGqjhgRXZ6/luQXyJP+5o945+N1zOIDRlhmCUEkb800cFZC1qHQHCWRQU6OJ72ojz+ih6Cf0QKsQs6STwXsRp1i7BAHG4G2TsX5Xzu0GNQWVehLyWdXl7sKQUtIqUHuNVi3DGoZyoe2BppLr/QVblqkZaar57pMXyD3dZx3v/uP01NFPAwmYck6KczscvI2iU3Dlg2XLktJ0XfQ5BfW0BRQIDAQAB';
//可设置异步通知接收服务地址(可选)
        $options->notifyUrl = "http://test2.monkey.mba/api/notifys";
        //可设置AES密钥,调用AES加解密相关接口时需要(可选)
        $options->encryptKey = "<-- 请填写您的AES密钥,例如:aa4BtZ4tspm2wnXLb1ThQA== -->";
        return $options;
    }

提交订单支付接口:getOrder

/**
     * 提交订单 返回支付宝页面
     * @return void
     */
   public function getOrder(Request $request)
   {
       if ($type == 'wxpay') {
           $order = OrderService::createOrder($uid, $book_id, 'wxpay');
            $url=url('pay',['order'=>'1']);
            return $this->redirect($url);
           echo "<script>location.href='pay?goods_id=${good_id}&uid=${uid}&sn=${sn}&description=${description}&paid_amount=${paid_amount}'</script>";
       }else if ($type == 'alipay')
       {
           $order = OrderService::createOrder($uid, $book_id, 'alipay');
           $good_id=$order['goods_id'];
           $uid=$order['uid'];
           $recharge_amount=$order['recharge_times'];
           $accumulated_recharge=$order['accumulated_recharge'];
           $paying_agent=$order['paying_agent'];
           $description=$order['description'];
           $paid_amount=$order['paid_amount'];
           $status=$order['status'];
           $sn=$order['sn'];
           $pay_model=$order['pay_model'];

             Factory::setOptions(\app\service\Alipay::getOptions());
        try {
            //2. 发起API调用(以支付能力下的统一收单交易创建接口为例)https://www.rimdeep.com/my  /   http://baidu.com      //http://www.book.com/api/notifys
            $result = Factory::payment()->App()->pay("$description", "$sn", "$paid_amount"," http://baidu.com",'http://test2.monkey.mba/api/returns');
            $string=json($result);
            $responseChecker = new ResponseChecker();
            // //3. 处理响应或异常
            if ($responseChecker->success($result)) {
            return isset($result->body) ? $string : $result;
           } else {
                echo "调用失败,原因:". $result->msg.",".$result->subMsg.PHP_EOL;
            }
        } catch (\Exception $e) {
            echo "调用失败,". $e->getMessage(). PHP_EOL;
        }
     }
   }

支付宝同步回调接口:Return

/**
     * 支付宝回调
     * @param Request $request
     * @return string|void
     */
    public function return(Request $request)
    {
        //1. 设置参数(全局只需设置一次)
         $data = $request->all();
        Factory::setOptions(\app\service\Alipay::getOptions());
        $result = Factory::payment()->common()->verifyNotify($data);
        if ($result)
        {
            $trade_no = $data['trade_no'];
            $out_trade_no  = $data['out_trade_no'];
             $total_amount = $data['total_amount'];
            return "success";
            // 验证通过,处理业务逻辑
        } else {

            \think\facade\Log::error('支付宝回调成功,验签发生错误,错误原因:');
        }
    }

支付宝异步回调接口:HandleNotify

protected $response;

    protected static $instance;

    /**
     * AliPay constructor.
     * @param array $config
     */
    public function __construct($config=[]){
        if (!$config){
            $config = [
                'appId' => config('app.ali_pay_appid'),
                'merchantPrivateKey' => config('app.alipay_merchant_private_key'),
                'alipayPublicKey' => config('app.alipay_public_key'),
                'notifyUrl' => config('app.notifyUrl')//.url('/api/notifys'),
            ];
            $this->config = array_merge($this->config, $config);
            $this->initialize();
            $this->response = new ResponseChecker();
        }
    }

    /**
     * 实例化
     * @param array $config
     * @return static
     */
    public static function instance($config=[]){
        if (is_null(self::$instance)){
            self::$instance = new static($config);
        }
        return self::$instance;
    }
/**
     * 支付宝异步回调
     * @return string
     */
    public static function handleNotify(){

        return self::instance()->notify(function ($notify){

            if (isset($notify->out_trade_no)){
                Factory::setOptions(\app\service\Alipay::getOptions());
//
                $result = Factory::payment()->common()->query($notify->out_trade_no);
                $array = get_object_vars($result);
//                dd($array['tradeStatus']);
//                可以用上面代码来判断支付状态
                if($array['tradeStatus'] == 'TRADE_FINISHED') {
                      return  'error';
                }elseif ($array['tradeStatus'] == 'TRADE_SUCCESS'){
                    $res=new Order();
                    $out_trade_no=$notify->out_trade_no;
                    $charge = $res->getOrder($out_trade_no);

                    if ($charge['status'] == 0)
                    {
                        $money = $charge['accumulated_recharge'];//金额

                        $data=[
                            'updatetime' => time(),
                            'status' => 1,
                        ];
                        $Dbresult = $res->getUpdate($out_trade_no,$data);
                        if ($Dbresult)
                        {
//                            订单状态已经更改
//                            根据订单金额转换书币
                            $goodChare=new GoodChare();
//                            获取订单金额
                            $currency=$goodChare->where('money',$money)->find();
//                            获取用户信息
                            $uid=1;
                            $use=new user();
                            $userLogin=$use->getUserLogin($uid);
                            if ($userLogin)
                            {
                                $amount = $money;
                                $rate = 100;
                                $bonus = $currency['smoney'];
// 计算个人总书币
                                $total = $amount * $rate + $bonus;
                                $moneys=$userLogin['money'] + $total;
                                $dataMoney=[
                                    'money'=>$moneys,
                                    'updatetime'=>time()
                                ];//where('uid',$uid)->update()
                                $totalUser=$use->getUserLogins($uid,$dataMoney);
                                if ($totalUser)
                                {
                                    return 'success';
                                }
                            }
                        }
                    }
                    elseif ($charge['status'] == 1)
                    {
                        return "已支付完成";
                    }
                }
            }
        });
    }

    /**
     * 异步回调
     * @param callable $notifyFn
     * @return string
     */
    public function notify(callable $notifyFn){

        $paramInfo=$_POST;
//        app()->request->filter(['trim']);
//        $paramInfo = app()->request->param();
        if (isset($paramInfo['type'])) unset($paramInfo['type']);
//        商户订单号
        $postOrder['out_trade_no'] = $paramInfo['out_trade_no'] ?? '';
//        支付宝交易号
        $postOrder['trade_no'] = $paramInfo['trade_no'] ?? '';
//        交易状态
        $postOrder['trade_status'] = $paramInfo['trade_status'] ?? '';
//        备注
        $postOrder['attach'] = isset($paramInfo['passback_params']) ? urldecode($paramInfo['passback_params']) : '';

//        if ($this->verifyNotify($paramInfo)){
            try {
                if ($notifyFn((object)$postOrder)){
                    return 'success';
                }
            }catch (\Exception $e){
                \think\facade\Log::error('支付宝异步回调成功,执行函数错误,错误单号:'.$postOrder['out_trade_no']);
            }
//        }
    }

支付宝验签接口:VerifyNotify

/**
     * 验签
     * @param $params
     * @return bool
     */
    protected function verifyNotify($params){

        try {
           return Factory::payment()->common()->verifyNotify($params);
        }catch (\Exception $e){
            \think\facade\Log::error('支付宝回调成功,验签发生错误,错误原因:'.$e->getMessage());
        }
        return false;
    }

alipaysdk/easysdk按装包:

composer require alipaysdk/easysdk

支付遇见bug及解决方法

thinkphp6 用json_encode返回数据给js,多了一串代码_page_trace” style=“position: fixed
图片未上传先看返回信息

"method=alipay.trade.app.pay&app_id=2021000122671540&timestamp=2023-07-10+19%3A04%3A59&format=json&version=1.0&alipay_sdk=alipay-easysdk-php-2.2.3&charset=UTF-8&sign_type=RSA2&biz_content=%7B%22subject%22%3A%22%E4%B9%A6%E5%B8%81%E5%85%85%E5%80%BC%22%2C%22out_trade_no%22%3A%22519104726365637815%22%2C%22total_amount%22%3A%2230%22%7D&notify_url=http%3A%2F%2Ftest2.monkey.mba%2Fapi%2Fnotifys&sign=drAKMR6%2BH26%2BwxmCek3omRpJnY%2F69L4Kr3bFijfyKncCQOJY68SPhJy1L7MvjEgslipWPh%2B9u%2FpzLIDCggCEO%2BfBTaV2rkV%2FmviklW9YLv8Ob2Gm2d0UpqkOqC6EZZtLt1bV4zzWjXJv3cJZbI6uQoZdmDhEE5HobksMfsIO5uWZUbpReA2P02zA%2BYtLNf4ezwWmZl4lSv0I%2BViKfQONbGC%2FkaK2sC1Z4H%2B%2BDXyBLAjLi1hNcCOwDabuCRa%2FsPsWMJZONu4r8dl17%2F8EkLnRFLJviNrstDCX2YrJNEFFB5SZYmqh5Ax0Qh7qfvBSCGqFnxBMj515Y6bzJqc0Q0bUmQ%3D%3D"<div id="think_page_trace" style="position: fixed;bottom:0;right:0;font-size:14px;width:100%;z-index: 999999;color: #000;text-align:left;font-family:'微软雅黑';">
    <div id="think_page_trace_tab" style="display: none;background:white;margin:0;height: 250px;">
        <div id="think_page_trace_tab_tit" style="height:30px;padding: 6px 12px 0;border-bottom:1px solid #ececec;border-top:1px solid #ececec;font-size:16px">
                        <span style="color:#000;padding-right:12px;height:30px;line-height:30px;display:inline-block;margin-right:3px;cursor:pointer;font-weight:700">基本</span>
                        <span style="color:#000;padding-right:12px;height:30px;line-height:30px;display:inline-block;margin-right:3px;cursor:pointer;font-weight:700">文件</span>
                        <span style="color:#000;padding-right:12px;height:30px;line-height:30px;display:inline-block;margin-right:3px;cursor:pointer;font-weight:700">流程</span>
                        <span style="color:#000;padding-right:12px;height:30px;line-height:30px;display:inline-block;margin-right:3px;cursor:pointer;font-weight:700">错误</span>
                        <span style="color:#000;padding-right:12px;height:30px;line-height:30px;display:inline-block;margin-right:3px;cursor:pointer;font-weight:700">SQL</span>
                        <span style="color:#000;padding-right:12px;height:30px;line-height:30px;display:inline-block;margin-right:3px;cursor:pointer;font-weight:700">调试</span>
                    </div>
        <div id="think_page_trace_tab_cont" style="overflow:auto;height:212px;padding:0;line-height: 24px">
                        <div style="display:none;">
                <ol style="padding: 0; margin:0">
                    <li style="border-bottom:1px solid #EEE;font-size:14px;padding:0 12px">请求信息 : 2023-07-10 19:04:59 HTTP/1.1 POST : http://test2.monkey.mba/api/payOrder?good_id=1&amp;money=30&amp;uid=1&amp;type=alipay</li><li style="border-bottom:1px solid #EEE;font-size:14px;padding:0 12px">运行时间 : 0.068179s [ 吞吐率:14.67req/s ] 内存消耗:3,866.95kb 文件加载:155</li><li style="border-bottom:1px solid #EEE;font-size:14px;padding:0 12px">查询信息 : 6 queries</li><li style="border-bottom:1px solid #EEE;font-size:14px;padding:0 12px">缓存信息 : 0 reads,0 writes</li>                </ol>
            </div>

后台代码

Factory::setOptions(\app\service\Alipay::getOptions());
        try {
            //2. 发起API调用(以支付能力下的统一收单交易创建接口为例)https://www.rimdeep.com/my  /   http://baidu.com      //http://www.book.com/api/notifys
            $result = Factory::payment()->App()->pay("$description", "$sn", "$paid_amount"," http://baidu.com",'http://test2.monkey.mba/api/returns');
            // $string=json($result);
            //  print_r(htmlspecialchars($string));
            $responseChecker = new ResponseChecker();
            // //3. 处理响应或异常
            if ($responseChecker->success($result)) {
                $string = $result->body;
                  $payParameterJson = json_encode($string);
      return isset($result->body) ? $payParameterJson : $result;

            } else {
                echo "调用失败,原因:". $result->msg.",".$result->subMsg.PHP_EOL;
            }
        } catch (\Exception $e) {
            echo "调用失败,". $e->getMessage(). PHP_EOL;
        }

这时无论如何更改都是带此div标签一开始以为是apipost接口问题跟客服人员进行调试,发现不是apipost问题之后追代码以为是支付宝方面问题有对接蚂蚁支付技术开发人员
这边技术人员给出我返回的字符串可以调用后把官方示例返还给我,至此支付宝方面问题排除,只能再次查看代码10来行代码一点一点查后来发现json_encode有问题,这里再把
json,json_encode,json_decode作用和优点区分下再说为什么会报错出现多出的div标签以及样式

json

json是一种轻量级的数据交换格式,它具有以下特点:

  1. json格式的数据可以被人类读写和理解;
  2. json格式的数据比较小,占用的带宽和存储空间较小;
  3. json格式的数据可以被各种编程语言轻松地解析和处理。

json_encode

json_encode是将php中的数据对象转换为json格式字符串的函数。它可以将各种数据类型(如数组、对象、数字、字符串等)转换为json格式的字符串。

json_decode

json_decode是将json格式字符串转换为php中的数据对象的函数。它可以将json格式的字符串转换为各种数据类型(如数组、对象、数字、字符串等)。

错误原因
这是因为ThinkPHP6引入了一个新的JSON响应格式选项,即JSON响应格式选项。这个选项可以让我们在JSON响应中包含一些额外的信息,例如响应状态码、响应头、响应体等。通过设置这个选项,我们可以使JSON响应更加丰富和完整。json_encode就会返回这些信息,其中,think_page_trace响应体中包含了请求的URL、请求方法、请求时间、响应时间、请求参数等信息。这些信息可以在JS代码中通过响应体的数据获取到,从而更好地进行数据处理和应用。
修改代码

Factory::setOptions(\app\service\Alipay::getOptions());
        try {
            //2. 发起API调用(以支付能力下的统一收单交易创建接口为例)https://www.rimdeep.com/my  /   http://baidu.com      //http://www.book.com/api/notifys
            $result = Factory::payment()->App()->pay("$description", "$sn", "$paid_amount"," http://baidu.com",'http://test2.monkey.mba/api/returns');

         $responseChecker = new ResponseChecker();
            // //3. 处理响应或异常
            if ($responseChecker->success($result)) {
           $string=json($result);
             return isset($result->body) ? $payParameterJson : $result;
            //  return "调用成功". PHP_EOL;
            } else {
                echo "调用失败,原因:". $result->msg.",".$result->subMsg.PHP_EOL;
            }
        } catch (\Exception $e) {
            echo "调用失败,". $e->getMessage(). PHP_EOL;
        }

故此数据返回成功

{
“body”: “method=alipay.trade.app.pay&app_id=2021000122671540&timestamp=2023-07-10+20%3A06%3A06&format=json&version=1.0&alipay_sdk=alipay-easysdk-php-2.2.3&charset=UTF-8&sign_type=RSA2&biz_content=%7B%22subject%22%3A%22%E4%B9%A6%E5%B8%81%E5%85%85%E5%80%BC%22%2C%22out_trade_no%22%3A%22519120107759209337%22%2C%22total_amount%22%3A%2230%22%7D&notify_url=http%3A%2F%2Ftest2.monkey.mba%2Fapi%2Fnotifys&sign=LGElOXJJFa9eR7bPDQaYvrTS7r27SiBPU5fpmyg%2Fz3ssYrWFJ8IkFSZhSQXLUiPzJy7D%2BXYFxbEDQJW9wTh58GhhnvNRdImGny%2F2kTOnPeHOvvXrx2Thl4HCLdn%2BtT%2F6K8L%2B%2FTyblKnGRsCD925Q3rczkQByWqe9GflhSEDcJb0WHWFL1cw6uyXAAYG2JMo0l9yLIbUeDfqsJGeaBn5aSODLndn1Wk%2B2%2F6UyG4tX%2BaiwcBTi6HYjoONSAtJyB0FpuJTTBHROhC2%2BwLXFU1f2390%2B8OuaMLW9sikFjtgAF0K8eX94GORzcXE6BybKy0buOt7WhTWr9Bnc4VDJRAkJvg%3D%3D”
}