Abbotton / alipay-sdk-php

🐜支付宝(蚂蚁金服)开放平台第三方 PHP SDK,基于官方最新版本。
MIT License
211 stars 50 forks source link

2.0 版本 request 里面没有 接口文件了吗? #23

Closed cuiliwu closed 3 years ago

cuiliwu commented 3 years ago

不传 biz_content 的 接口 一直报错 . 赋值也传不到支付宝那边去 .

cuiliwu commented 3 years ago

无biz_content 接口 报错的两种情况.

  1. Setting unknown property: app_desc

    45: /var/www/html/php/xiangmu/vendor/wi1dcard/alipay-sdk/aop/AlipayRequestFactory.php

  2. Business Failed: 修改的参数全部为空

Abbotton commented 3 years ago

@cuiliwu 请贴一下代码.

cuiliwu commented 3 years ago

@Abbotton 我用的 示例代码。

alipay-sdk/aop/AopClient.php:140

我找到的问题是 这个函数相比于上个版本没有 参数合并。参数提交不出去。 ` /**

Abbotton commented 3 years ago

@cuiliwu 这个包和官方SDK是不一样的, 请贴一下您使用这个包时对应的业务代码.

Y-A-K-E commented 3 years ago

@Abbotton 我也是相同问题.

我调用创建二维码,或者解析auth_code的接口均失败. 我最后在AlipayCurlRequester这里 curl发送之前打印参数和网址. 发现 post的参数里面biz_content根本没有...

Abbotton commented 3 years ago

官方SDK文档中Request类太多了,我没办法一个一个测试,还请贴一下您的业务代码,我好复现,谢谢 🤝

Y-A-K-E commented 3 years ago

我线上线下的PHP版本版本都是7.3

//生成二维码

    public $miniapp = null;
    protected $keyPair = null;
    protected $appid = '2021002178607904';

    $this->keyPair = \Alipay\Key\AlipayKeyPair::create(
        dirname(__FILE__) . '/../../../x509/app_private_key.pem',
        dirname(__FILE__) . '/../../../x509/alipay_public_key.pem'
    );
    $this->miniapp = new \Alipay\AopClient($this->appid, $this->keyPair);

上面是class声明以及公共函数初始化 以下是函数内.

    //创建二维码接口
    $bizContent = [
        'url_param' => '/pages/index/index',
        'query_param' => 'scene=12312',
        'describe' => 'login',
    ];  

    $request = (new \Alipay\AlipayRequestFactory)->create('alipay.open.app.qrcode.create', [
        'biz_content' => $bizContent,
    ]);
    $data = $this->miniapp->execute($request)->getData();

    if(!empty($data) && !empty($data['qr_code_url'])){
        $this-> redirect($data['qr_code_url']);  //页面重定向到图片
    }

以上代码在2.0.0的框架中,无论如何测试都是支付宝返回参数错误.经过验证CURL发送给支付宝post里面并没有包含biz_content相关内容. 1.3.1是正常的.现在已经在使用了.


同样我在2.0.0的情况下解析auth_code也是失败的. 代码几乎都是直接抄的你提供的demo的. 我框架回到1.3.1是正常的.现在已经在使用了.

            $request = AlipayRequestFactory::create('alipay.system.oauth.token', [
                'grant_type' => 'authorization_code',
                'code'       => $code,
            ]);

            try {
                $data = $this->miniapp->execute($request)->getData();

            } catch (Exception $e){
                throw new Exception('小程序授权code错误,考虑清小程序缓存.');
            }

        //继续获取用户的基本信息,此接口未验证2.0.0是否有正常.
        //我是在1.3.1使用正常.
    $request = AlipayRequestFactory::create('alipay.user.info.share',[
        'auth_token' => $data['access_token'],
    ] );
    $data2= $this->miniapp->execute($request)->getData();
Abbotton commented 3 years ago

刚才发布了一个小版本更新,我本地实测已经解决这个问题,所以先关闭这个issue,如果两位在使用过程中还碰到其他问题,烦请另开一个issue,非常感谢。 @Y-A-K-E @cuiliwu