APIv2特殊GET请求抛异常问题,相关记录见这里。APIv2服务端返回值做精细判断,对于return_code(返回状态码)及/或result_code(业务结果)有key且值不为SUCCESS的情形,抛出客户端RejectionException异常,并加入AuthcodetoopenidTest.php异常处理示例。RSA非对称加解密方案上,不再支持OPENSSL_PKCS1_PADDING填充模式,相关记录见这里;#[\SensitiveParameter]参数注解,加强信息安全;/v3/global/statements应答特殊处理逻辑;OpenSSL3.0 上,常量 RSA_SSLV23_PADDING 被删除(详细可阅读 openssl/openssl#14216, openssl/openssl#14283),PHP做了兼容处理,如果扩展依赖的是OpenSSL3.0,则对应的OPENSSL_SSLV23_PADDING常量将不存在,进而影响到了「非对称加解密混合填充模式的测试用例」的覆盖(详情可阅读 shivammathur/setup-php#658)。本类库并不支持此填充模式,删除对OPENSSL_SSLV23_PADDING的测试断言,向前兼容;ArrayIterator的一个“伪”动态属性结构体,对象属性访问实则访问的是ArrayObject内置__storage属性,形似动态属性实则不是;此废弃提示对本类库本身无影响;APIv2 上的trigger_error提醒,以消除不必要的恐慌;Transformer::walk 方法,以支持 Stringable 对象的值转换;APIv3客诉图片下载测试用例,示例说明如何避免double pct-encoded问题;hash方法在PHP8变更了返回值逻辑,代之为抛送ValueError异常,优化MediaUtilTest测试用例,以兼容PHP7;APIv2请求/响应白名单URL及调整验签逻辑,对于白名单内的请求,已知无sign返回,应用侧自动忽略验签,详见 #92;mchid为字符串;chain接口函数入参为字符串;README,增加常见问题示例说明URL template用法;Rsa::parse代码逻辑,去除is_resource/is_object检测;Rsa::from[Pkcs8|Pkcs1|Spki]加载语法糖实现,以Rsa::from为统一入口;ClientDecorator::request[Async]处理逻辑,优先替换URI Template变量,可支持短链模式调用接口;phpstan/phpstan:^1.0支持;Unsafe call to private method|property ... through static::调用隐患;Guzzle最低版本支持至v6.5.0,相应降低PHP版本要求至7.1.2,相关见#71519;PHPUnit最低版本至v7.5.0||v8.5.16||v9.3.5,相关问题见#4663;详细说明可见1.3至1.4升级指南
MediaUtil::setMeta函数,以支持特殊场景(API)下meta数据结构的特殊需求;APIv2上,合单支付产品xml入参是combine_mch_id引发的不适问题;OpenAPI\V2&OpenAPI\V3的两个入口,接口描述文件拆分为单独的包发行,生产环境无需安装(没必要),仅面向开发环境;userAgent方法,使拼接User-Agent字典清晰可读;README,增加V3通知验签注释说明,增加v2链式otherwise处理逻辑说明;at sign形式,温和提示APIv2的DEP_XML_PROTOCOL_IS_REACHABLE_EOL,相关#38;Transformer::toArray函数,对入参xml非法时,返回空array,并把最后一条错误信息温和地打入E_USER_NOTICE通道;Formatter::ksort排列键值时兼容问题,使用字典序(dictionary order)排序,相关#41, 感谢 @suiaiyun 报告此问题;加密RSA私钥的测试用例覆盖;withDefaults函数,使用变长参数合并初始化参数;Rsa::encrypt及Rsa::decrpt方法,增加第三可选参数,以支持OPENSSL_PKCS1_PADDING填充模式的加解密;Rsa::from统一加载函数,以接替PemUtil::loadPrivateKey函数功能;Rsa::fromPkcs1, Rsa::fromPkcs8, Rsa::fromSpki语法糖,以支持从云端加载RSA公/私钥;Rsa::pkcs1ToSpki格式转换函数,入参是base64字符串;PemUtil::loadPrivateKey及PemUtil::loadPrivateKeyFromString为不推荐用法;平台证书下载工具使用说明,增加composer exec执行方法说明;README,增加回调通知处理说明及样本代码;严格限定名称方式引用系统内置函数;Makefile,在生成模拟证书时,避免产生0x00开头的证书序列号;composer.json,新增guzzlehttp/uri-template:^1.0支持;README,密钥、证书等相关术语保持一致;UPGRADING,增加从php_sdk_v3.0.10迁移指南;PHP7.2/7.3/7.4/8.0 + Linux/macOS/Windows运行时;composer.json,去除test, phpstan命令,面向生产环境可用;\GuzzleHttp\Psr7\Stream::__toString取值,并在取值后,判断如果影响了Stream指针,则回滚至开始位;APIv2上一些特殊用法示例,增加数据签名样例;APIv2文档提示说明DEP_XML_PROTOCOL_IS_REACHABLE_EOL;APIv2上,转账至用户零钱接口,xml入参是mchid引发的不适问题;APIv2上转账至用户零钱接口测试用例,样例说明如何进行异常捕获;APIv3的正常返回内容(20X)做精细判断,逻辑异常时使用\GuzzleHttp\Exception\RequestException抛出,应用端可捕获源返回内容;30X及4XX,5XX返回,Guzzle基础中间件默认已处理,具体用法及使用,可参考\GuzzleHttp\RedirectMiddleware及\GuzzleHttp\Middleware::httpErrors说明;CertificateDownloader异常处理逻辑部分,详见#22;README使用示例的异常处理部分;WeChatPay\Crypto\Hash::equals方法,用于比较APIv2哈希签名值是否相等;APIv2的商户,在回调通知场景中,使用此方法来验签,相关说明见PHPhash_equals说明;APIv3及APIv2工厂方法初始化说明,推荐优先使用APIv3;Formatter::nonce 算法,使用密码学安全的random_bytes生产BASE62随机字符串;declare(strict_types=1)校验模式;Authorization 头格式顺序,debug时优先展示关键信息;MediaUtil类读取文件时,严格二进制读,避免跨平台干扰问题;APIv2版用法;segments 首字符大写时异常问题;handler,透传给了下游客户端问题;PHP最低版本说明,相关问题 #10;APIv3版用法;jsonBased入参判断,平台证书及序列号结构体内不能含商户序列号,相关问题 #8;github actions,针对PHP7.2单独缓存依赖(PHP7.2下只能跑PHPUnit8,PHP7.3以上均可跑PHPUnit9);composer test 命令并集成进 CI 内(测试用例持续增加中);PHPStan 所有遗留问题;github actions 覆盖 PHP7.2/7.3/7.4/8.0 + Linux/macOS/Windows环境;phpstan 至 level8 最严谨级别,并修复大量遗留问题;\WeChatPay\Exception\WeChatPayException 异常类接口;phpstan level6 静态分析遗留问题;\WeChatPay\Exception\WeChatPayException异常类接口;源自 wechatpay-guzzle-middleware,不兼容源版,顾自 v1.0.0 开始。
APIv2 & APIv3 同质化调用SDK,默认为 APIv3 版;APIv2 为不推荐调用,预期 v2.0 会移除掉;同步(sync)(默认)及 异步(async) 请求服务端接口;链式(chain) 请求服务端接口;