收藏
回答

PHP 企业付款到银行卡 获取公钥接口 为什么总是返回 SIGN_ERR?

校验签名也正确,但是一直返回的都是签名错误,不知道错在哪里



代码也贴出来

private function get_pub_key()

    {

        $rsafile = SITE_PATH . 'data/cert/' . $this->appid . '_publicrsa.pem';

        if (!is_file($rsafile)) {

            $data['mch_id'= $this->mchid;

            $data['nonce_str'= $this->random(12);

            $sign = $this->getParam($data);

            $dataXML = "<xml>

                <mch_id>" . $data['mch_id'. "</mch_id>

                <nonce_str>" . $data['nonce_str'. "</nonce_str>

                <sign>" . $sign . "</sign>

                </xml>";

            $url = 'https://fraud.mch.weixin.qq.com/risk/getpublickey';

            $ret = $this->httpsPost($url, $dataXML, true);


            if ($ret['return_code'== 'SUCCESS' && isset($ret['pub_key'])) {

                file_put_contents($rsafile, $ret['pub_key']);

                return $ret['pub_key'];

            } else {

                return null;

            }

        } else {

            return file_get_contents($rsafile);

        }

    }


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

1 个回答

  • 微信支付技术助手8
    微信支付技术助手8
    2020-07-17

    请按照以下几点进行排查:

    1、使用签名检查工具(https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=20_1)校验签名算法是否有误

    2、确认秘钥是否有误(服务商模式使用服务商商户号秘钥,秘钥是在商户平台配置,如果同一商户号调用其它接口成功可排除是秘钥问题)

    3、确认接口实际的请求参数与生成签名原串的参数一致,不能增加或缺少参数(可通过打印签名原串进行排查)

    4、确认参数的大小写,参数名与接口文档一致

    5、签名原串的参数值使用原始值,不需要encode

    6、接口需要使用UTF-8编码

    2020-07-17
    有用
    回复
登录 后发表内容
问题标签