收藏
回答

微信退款接口返回签名错误,但是我使用该方法生成的支付签名可用,为什么?

我使用的接口是退款接口:

https://api.mch.weixin.qq.com/v3/refund/domestic/refunds

签名生成代码如下,服务商和商户号证书都试了,都无法退款成功。返回信息是签名错误。

$url传入的是退款接口地址,证书序列号和商户号都修改过服务商和特约商户的了,都跑不通。

public function getAuthorization($http_method = "POST", $body = [], $url = "v3/pay/partner/transactions/jsapi"): string
{
    $serial_no = $this->merchantCertificateSerial; // 商户证书序列号
    $mchid = $this->config['service_member'];  // 商户号
    $timestamp = time();
    $nonce = $this->nonce_str();
    $url_parts = parse_url($url);

    $canonical_url = ($url_parts['path'] . (!empty($url_parts['query']) ? "?${url_parts['query']}" : ""));
    $message = $http_method . "\n" .
        $canonical_url . "\n" .
        $timestamp . "\n" .
        $nonce . "\n" .
        $body . "\n";

    openssl_sign($message, $raw_sign, $this->merchantPrivateKeyInstance, 'sha256WithRSAEncryption');
    $sign = base64_encode($raw_sign);

    return sprintf('mchid="%s",nonce_str="%s",timestamp="%d",serial_no="%s",signature="%s"',
        $mchid, $nonce, $timestamp, $serial_no, $sign);
}


是不是这里的服务没授权导致的,但是我使用商户号进行退款仍然提示签名错误,错误信息如下

{

    "code": "SIGN_ERROR",

    "detail": {

        "detail": {

            "issue": "sign not match"

        },

        "field": "signature",

        "location": "authorization",

        "sign_information": {

            "method": "POST",

            "sign_message_length": 324,

            "truncated_sign_message": "POST\n/v3/refund/domestic/refunds\n1693894402\nwwGNussqESygThKOPRGplkjMAWuBnFoB\n{\"out_tr\n",

            "url": "/v3/refund/domestic/refunds"

        }

    },

    "message": "错误的签名,验签失败"

}

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

2 个回答

  • Memory
    Memory
    2023-09-05

    服务商模式退款使用的是服务商商户号的证书密钥,用sdk吧https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay6_0.shtml

    2023-09-05
    有用
    回复 15
    • 码蚁蘸酱
      码蚁蘸酱
      2023-09-05
      我用的是这个sdk(wechatpay-php),现在能跑通了。但是我使用那个签名和参数,在apipost里面跑,还是提示签名失败。不知道为什么,但是服务商号有接口退款的订单了,而且微信也收到退款了
      2023-09-05
      回复
    • Memory
      Memory
      2023-09-05回复码蚁蘸酱
      那说明你计算不正确或者前后参数不一致
      2023-09-05
      回复
    • 码蚁蘸酱
      码蚁蘸酱
      发表于移动端
      2023-09-05回复Memory
      不好意思,没太明白你的意思,不一致的话接口应该访问失败吧
      2023-09-05
      回复
    • Memory
      Memory
      2023-09-05回复码蚁蘸酱
      计算签名参数和请求接口参数
      2023-09-05
      回复
    • 码蚁蘸酱
      码蚁蘸酱
      2023-09-05
      你的意思是这个退款接口,计算签名参数和请求接口参数不一致也能跑通吗?   我现在的情况是接口正常访问,可以退款。但是我记录它的Authorization和参数,在apipost里面进行访问就提示签名不对,太奇怪了
      2023-09-05
      回复
    查看更多(10)
  • 码蚁蘸酱
    码蚁蘸酱
    2023-09-05

    服务商API退款是授权了的

    2023-09-05
    有用
    回复
登录 后发表内容