wechatpay-apiv3 / wechatpay-php

微信支付 APIv3 的官方 PHP Library,同时也支持 APIv2
Apache License 2.0
475 stars 98 forks source link

关于Get请求query参数的一个小问题 #132

Closed Guxinpei closed 3 months ago

Guxinpei commented 3 months ago

运行环境

- OS:Bullseye (其实这不重要)
- PHP:官方Bullseye的镜像 (就如同我之前所说)
- wechatpay-php:wechatpay/wechatpay:^1.4(lock为1.4.9)

描述你的问题现象

Hi, 我团队的小伙伴get请求时,调用chain的时候跟我反馈了一个小问题。

//以获取资源为例
/** @var BuilderChainable $apiInstance */
$apiInstance = WechatSdkFactory::make($model)->getSdkInstance();
$apiInstance->v3->merchantService->images->_media_id_
  ->get([
      'media_id' => $mediaId,
  ]);// that's cool ,它会返回正确的信息

$apiInstance->chain('v3/merchant-service/images/{media_id}')
  ->get([
      'media_id' => $mediaId,
  ]);// 这也没问题

$apiInstance->chain("v3/merchant-service/images/{$mediaId}")
  ->get();// nope,这样不行,因为sdk无法识别query哪一部分是真正的参数,所以authcation会有问题。

我理解验签过程必须有所有参数进行校验的困难,但是这看起来还真的挺怪XD 我尝试过写个PR去改进它,但到其实最后我也没找到办法。也许大家有更好的主意?

TheNorthMemory commented 3 months ago

本类库处理 URL.pathname 时是大小写敏感的,自己拼接时,要保证不含大写字符就不会有问题,对于值构成规则未知的源,最好就是用 {placeholder} 写法。

Guxinpei commented 3 months ago

Hi , @TheNorthMemory 是的,我们也意识到了这一点。谢谢你的帮助。