wechatpay-apiv3 / wechatpay-php

微信支付 APIv3 的官方 PHP Library,同时也支持 APIv2

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

normalize 格式化url path方法会格式化openid,导致请求接口微信不能正确获取openid

yybawang opened this issue · comments

有的接口的path里是有 openid 的,openid 是有大小写的了,转换后就得到一个乱掉的openid了,

我请求的支付服务商->发放优惠券接口,微信会返回 PARAM_ERROR,appid和openid不匹配
如图

示例

感谢及时回复,大家有遇到类似的,可以查看 #56

normalize 在还原URL的时候,具有大小写敏感特性,规则如下:

  1. 首字符大写是映射PHPinterface接口作用;
  2. 中间大写字符是映射连字符hyphen(-)作用;
  3. 首尾字符如果是下划线undersore(_),是还原uri_template作用;

例如,查询代金券详情,映射的PHP接口就形如:

<?php declare(strict_types=1);/* Generated file. DO NOT EDIT! */

namespace WeChatPay\OpenAPI\V3\Marketing\Favor\Users\_openid_\Coupons;

use Psr\Http\Message\ResponseInterface;
use GuzzleHttp\Promise\PromiseInterface;

/**
 * 这是一个纯接口描述文件,由程序自动生成,旨在为IDE提供结构提示,无他用。
 */
interface _coupon_id_
{
    /**
     * 查询代金券详情(同步模式)
     * @param array<string,mixed> $options
     * @link https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/marketing/convention/chapter3_6.shtml
     */
    public function get(array $options = [
        'openid' => '',
        'coupon_id' => '',
        'query' => [
            'appid' => '',
        ],
    ]): ResponseInterface;

    /**
     * 查询代金券详情(异步模式)
     * @param array<string,mixed> $options
     * @link https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/marketing/convention/chapter3_6.shtml#async
     */
    public function getAsync(array $options = [
        'openid' => '',
        'coupon_id' => '',
        'query' => [
            'appid' => '',
        ],
    ]): PromiseInterface;
}

上述文件符合Psr4规范,可正常反推出源URL的本来样子。

如果用PHPStorm,建议在开发环境再安装 iwechatpay/openapi 接口描述开发包,以上提示皆可自动提示完成。