Closed cuiliwu closed 3 years ago
无biz_content 接口 报错的两种情况.
Setting unknown property: app_desc
Business Failed: 修改的参数全部为空
@cuiliwu 请贴一下代码.
@Abbotton 我用的 示例代码。
alipay-sdk/aop/AopClient.php:140
我找到的问题是 这个函数相比于上个版本没有 参数合并。参数提交不出去。 ` /**
@return array */ public function build(AlipayRequest $request) { // 组装系统参数 $sysParams = []; $sysParams['app_id'] = $this->appId; $sysParams['version'] = static::API_VERSION; $sysParams['alipay_sdk'] = static::SDK_VERSION;
$sysParams['charset'] = $this->requester->getCharset();
$sysParams['format'] = $this->parser->getFormat();
$sysParams['sign_type'] = $this->signer->getSignType();
$sysParams['method'] = $request->getApiMethodName();
$sysParams['timestamp'] = $request->getTimestamp();
$sysParams['notify_url'] = $request->getNotifyUrl();
$sysParams['return_url'] = $request->getReturnUrl();
$sysParams['terminal_type'] = $request->getTerminalType();
$sysParams['terminal_info'] = $request->getTerminalInfo();
$sysParams['prod_code'] = $request->getProdCode();
$sysParams['auth_token'] = $request->getAuthToken();
$sysParams['app_auth_token'] = $request->getAppAuthToken();
// 转换可能是数组的参数
if ($request->arrayAsJson) {
foreach ($sysParams as &$param) {
if (is_array($param) || is_object($param)) {
$param = json_encode($param, JSON_UNESCAPED_UNICODE);
}
}
unset($param);
}
// 签名
$sysParams['sign'] = $this->signer->generateByParams(
$sysParams,
$this->keyPair->getPrivateKey()->asResource()
);
return $sysParams;
}`
@cuiliwu 这个包和官方SDK是不一样的, 请贴一下您使用这个包时对应的业务代码.
@Abbotton 我也是相同问题.
我调用创建二维码,或者解析auth_code的接口均失败. 我最后在AlipayCurlRequester这里 curl发送之前打印参数和网址. 发现 post的参数里面biz_content根本没有...
官方SDK文档中Request类太多了,我没办法一个一个测试,还请贴一下您的业务代码,我好复现,谢谢 🤝
我线上线下的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();
刚才发布了一个小版本更新,我本地实测已经解决这个问题,所以先关闭这个issue,如果两位在使用过程中还碰到其他问题,烦请另开一个issue,非常感谢。 @Y-A-K-E @cuiliwu
不传 biz_content 的 接口 一直报错 . 赋值也传不到支付宝那边去 .