收藏
回答

服务商特约商户进件提交申请单密文加密错误

错误信息:

{"code""PARAM_ERROR","message""请确认待处理的消息是否为加密后的密文"}

看到特约商户更新了文档之后,我采用的是最新的API-v3接口规则

请求头如下(证书序列号是微信支付平台序列号):

array("Content-Type: application/json","Accept:application/json","User-Agent:".$_SERVER['HTTP_USER_AGENT'],"Authorization:"$this->authorization,"Wechatpay-Serial:"$this->cert_sn)

验签如下(验签使用的是商户平台私钥):

$url_parts = parse_url($url);
$canonical_url = ($url_parts['path'] . (!empty($url_parts['query'])) ? "?${url_parts['query']}" : ""));
$message = strtoupper($http_method).'\n'.canonical_url.'\n'.
    $timestamp.'\n'.
    $nonce.'\n'.
    $body.'\n';
$pri_key_string = file_get_contents($this->apiclient_key);
$pri_key = openssl_get_privatekey($pri_key_string);
if(!openssl_sign(message, raw_sign, pri_key, 'sha256WithRSAEncryption')){
    throw new WxPayException('make sign failed:'.PHP_EOL);
}
$sign = base64_encode($raw_sign);

加密敏感信息(使用微信支付平台公钥):

$pub_key_string = file_get_contents($this->cert_path);
$pub_key = openssl_get_publickey($pub_key_string);
$encrypted = '';
if(openssl_public_encrypt($str,$encrypted,$pub_key,OPENSSL_PKCS1_OAEP_PADDING)){
    return base64_encode($encrypted);
}

麻烦看一下是什么问题,官方给的错误信息没有明确指出是哪个字段加密出错,现在找不到处理的办法了。

最后一次编辑于  2019-12-31
回答关注问题邀请回答
收藏

3 个回答

  • 微信支付技术助手1
    微信支付技术助手1
    2019-12-31

    这边是上传了敏感数据吧,要加密的。关键加密数据的格式需要参考文档。仔细参考文档核对一下。

    2019-12-31
    赞同
    回复 2
    • Zend Rhythm
      Zend Rhythm
      2019-12-31
      部分加密后的字段如下,加密是成功的,老版本采用的是OPENSSL_PKCS1_PADDING加密一直是成功的,新版本采用的是OPENSSL_PKCS1_OAEP_PADDING用的是同一个公钥,但是不知道为什么微信接口返回的失败。
      2019-12-31
      回复
    • Zend Rhythm
      Zend Rhythm
      2019-12-31
      请官方确认后给个答复,在线等,急......
      2019-12-31
      回复
  • Zend Rhythm
    Zend Rhythm
    2019-12-31

    解决了。

    2019-12-31
    赞同
    回复 2
  • Hanks🇨🇳
    Hanks🇨🇳
    2019-12-31

    谢邀,首先看不懂php,再一个没做过你这,等官方看下吧

    2019-12-31
    赞同
    回复
登录 后发表内容
问题标签