收藏
回答

小程序发放代金券,code换取的openid,仍提示 appid与openid不匹配,求解?

小程序appid= wx65abf9de01c6955f

用户登录后,用code换取的openid = okTtO5TKc6evEH_guNljYmAXauSs

商户号:1526204451,已与appid绑定,有java做的后台能正常发券,重新用wechatpay-php开发后遇到问题

调用结果{"code":"INVALID_REQUEST","message":"appid与openid不匹配"}

php源码如下:

   public function wxSendCoupons(array $params){

        $openid='okTtO5TKc6evEH_guNljYmAXauSs';

        $wx = $this->getWxApiInstance();

        $resp = $wx

            ->v3->marketing->favor->users->$openid->coupons

            ->postAsync([

                'headers'=>['Content-type'=>"application/json;charset-utf8"],

                'json'=>[

                    'stock_id'=>'16007953',

                    'out_request_no'=>'1526204451'.date('Ymd').'-'.'1134123412',

                    'stock_creator_mchid'=>'1526204451',

                    'appid'=>'wx65abf9de01c6955f'

                ]

            ])

        ->then(static function ($response) {

            $s = $response->getBoday();

            error_log('return Data:' . $s, 3, self::$infoFile);

            echo $s;

        })

        ->otherwise(static function ($e) {

            if ($e instanceof \GuzzleHttp\Exception\RequestException && $e->hasResponse()) {

                $s = $e->getResponse()->getBody();


                error_log('return Data:' . $s, 3, self::$infoFile);

                echo $s;

                return $s;

            }


        })

        ->wait();


    }



回答关注问题邀请回答
收藏

4 个回答

  • 北望沣渭
    北望沣渭
    2021-11-02

    代码改一下:

    <?php
    $resp = $wx
        ->v3->marketing->favor->users->_openid_->coupons
        ->postAsync([
            'openid' => $openid,
            'json'=>[
                'stock_id'=>'16007953',
                'out_request_no'=>'1526204451'.date('Ymd').'-'.'1134123412',
                'stock_creator_mchid'=>'1526204451',
                'appid'=>'wx65abf9de01c6955f'
            ]
        ])
    


    建议安装IDE提示工具包 composer require --dev iwechatpay/openapi,可以很直观看到请求数据结构。

    2021-11-02
    有用 2
    回复 1
    • YT春雨
      YT春雨
      2021-11-03
      按照这样改,发券成功
      2021-11-03
      回复
  • 神经蛙
    神经蛙
    2021-11-02

    如果java没问题,换成php就有问题,那就不可能是微信的问题,要么是你们的代码写错了,要么是php天然有缺陷?

    2021-11-02
    有用
    回复
  • Memory
    Memory
    2021-11-02

    检查是否满足这两个规则:

    校验规则:

    1,可用归属商户号绑定的APPID获取的openid

    2,可用发券商户绑定的APPID获取的openid

    2021-11-02
    有用
    回复
  • YT春雨
    YT春雨
    2021-11-02

    补充一下,$this->getWxApiInstance();就是把获取微信官方SDK创建一个实例,

    相当于$instance = Builder::factory(...............)

    本部分代码因素导致错误的可能应可排除,可以调用其他接口。

    2021-11-02
    有用
    回复 1
    • 北望沣渭
      北望沣渭
      2021-11-02
      问题出在 `->$openid` 上,没按uri_template方式去构造请求参数,其value中的大写字符会被转义,所以就不匹配了
      2021-11-02
      回复
登录 后发表内容