公告列表
公告列表
收藏
回答

Http头Authorization值格式错误,请参考《微信支付商户REST API签名规则》?

按照官方文档 https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay4_0.shtml的步骤, 获取签名时,依然报 ‘Http头Authorization值格式错误,请参考《微信支付商户REST API签名规则》’。但是我觉得最离谱的是,把官网的命令复制下来执行后,依然报此错误,按理说是报数据错误,各非格式问题。有人员能解答一下吗?

以下是获取签名信息的代码,同样也是官方给的示例代码:

public static void main(String[]args) throws Exception {
    //认证类型
    String schema = "WECHATPAY2-SHA256-RSA2048";
    String httpurl = "/v3/certificates";
    String httpAuthorization = getAuthorization("GET", httpurl, "");
    String curl = "curl https://api.mch.weixin.qq.com/v3/certificates -H 'Authorization: WECHATPAY2-SHA256-RSA2048 " + httpAuthorization + "'";
    System.out.println(curl);
}
/**
 * 得到签名信息
 * @param method
 * @param url
 * @param body
 * @return
 * @throws Exception
 */
public static String getAuthorization(String method, String url, String body) throws Exception {
    String nonceStr = StrUtil.generateNonceStr();
    long timestamp = System.currentTimeMillis() / 1000;
    //获取签名串
    String message = buildMessage(method, url, timestamp, nonceStr, body);
    System.out.println("签名串:"+message);
    //得到签名
    String signature = sign(message.getBytes("utf-8"));
    System.out.println("签名值:"+signature);
    //五项签名信息,无顺序要求
    String httpAuthorization = "mchid=\"" + MCHID_JDKJ + "\","
            + "nonce_str=\"" + nonceStr + "\","
            + "signature=\"" + signature + "\","
            + "timestamp=\"" + timestamp + "\","
            + "serial_no=\"" + MCHSERIALNO_JDKJ + "\""
            ;
    System.out.println("httpAuthorization:" + httpAuthorization);
    return httpAuthorization;
}
/**
 * 获取签名值
 * @param message
 * @return
 * @throws Exception
 */
public static String sign(byte[] message) throws Exception {
    Signature sign = Signature.getInstance("SHA256withRSA");
    //# 示例:私钥存储在文件
//        PrivateKey merchantPrivateKey = PemUtil.loadPrivateKey(new FileInputStream("D:\\test\\apiclient_key.pem"));
    PrivateKey merchantPrivateKey = getPrivateKey("D:\\test\\apiclient_key.pem");
    sign.initSign(merchantPrivateKey);
    sign.update(message);
    return Base64.getEncoder().encodeToString(sign.sign());
}
/**
 * 获取私钥。
 * @param filename 私钥文件路径  (required)
 * @return 私钥对象
 */
public static PrivateKey getPrivateKey(String filename) throws IOException {
String content = new String(Files.readAllBytes(Paths.get(filename)), "utf-8");
    try {
        String privateKey = content.replace("-----BEGIN PRIVATE KEY-----", "")
                .replace("-----END PRIVATE KEY-----", "")
                .replaceAll("\\s+", "");
        KeyFactory kf = KeyFactory.getInstance("RSA");
        return kf.generatePrivate(
                new PKCS8EncodedKeySpec(Base64.getDecoder().decode(privateKey)));
    } catch (NoSuchAlgorithmException e) {
        throw new RuntimeException("当前Java环境不支持RSA", e);
    } catch (InvalidKeySpecException e) {
        throw new RuntimeException("无效的密钥格式");
    }
}
/**
 * 构造签名串
 * 签名串一共有五行,每一行为一个参数。行尾以 \n(换行符,ASCII编码值为0x0A)结束,包括最后一行。如果参数本身以\n结束,也需要附加一个\n
 * HTTP请求方法\n
 * URL\n
 * 请求时间戳\n
 * 请求随机串\n
 * 请求报文主体\n
 * @param method
 * @param url
 * @param timestamp
 * @param nonceStr
 * @param body
 * @return
 * @throws Exception
 */
public static String buildMessage(String method, String url, long timestamp, String nonceStr, String body) {
    return method + "\n"
            + url + "\n"
            + timestamp + "\n"
            + nonceStr + "\n"
            + body + "\n";
}

最后生成的签名信息如下:

最后使用命令执行结果如下:

请问这是哪里的问题

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

1 个回答

  • 北望沣渭
    北望沣渭
    2022-03-10

    谢邀:建议用官方的jar包, https://github.com/wechatpay-apiv3/wechatpay-apache-httpclient Central源就能安装到。。。。 https://search.maven.org/artifact/com.github.wechatpay-apiv3/wechatpay-apache-httpclient

    2022-03-10
    有用
    回复 1
    • 伏丹域扬
      伏丹域扬
      2023-06-03
      https://github.com/wechatpay-apiv3/wechatpay-php
      我靠这不是大佬吗 github官方文档的头像也是大佬您
      2023-06-03
      回复
请 登录 后发表内容
相关问题
  • Http头Authorization值格式错误,请参考《微信支付商户REST API签名规则》
  • Http头Authorization值格式错误,请参考《微信支付商户REST API签名规则》?
  • 小程序统一下单API返回Http头Authorization值格式错误,请参考《微信支付商户REST
  • 获取Http头Authorization值格式错误
  • Http头Authorization值格式错误
相关文档
  • 错误码: 小程序/开发/云开发/参考信息/错误码
  • 错误码: 小程序/开发/云开发/参考信息/错误码
  • API请求处理: 小程序/开发/服务端/开发前必读/服务端api签名指南
  • API响应处理: 小程序/开发/服务端/开发前必读/服务端api签名指南
  • 错误码: 小程序/开发/服务端/开发前必读/服务端api签名指南

聚圣源知有儿童挑促织银行卡转账www.212hh.com互联网公司排名起名麦田守望者最远视角宏软件科技公司起名村居古诗适合怎么起名字宋词起名小说姓邓起名大全男孩童起名大全男孩绝品小仙医元起名科兴疫苗第三针数据餐饮招商加盟宝宝起名起起名100分女宝宝姓程起名大全挂牌神仙阜兴事件工贸有限公司起名字法律事务所起名逢床作戏作者大王叫我来飙车起名用八笔画的字深空之流浪舰队给狗年宝宝起小名穿越之好事多磨古剑奇谭2全剧情使用锦字起名安康免费起名测名打分淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化