import okhttp3.HttpUrl;  //需要导入最新okhttp-3.10.0的jar包与对应需连同导入使用的okio-1.14.0的jar包
import java.security.Signature;
import java.util.Base64; //需要使用jdb1.8以上的版本

// Authorization: <schema> <token>
// GET - getToken("GET", httpurl, "")
// POST - getToken("POST", httpurl, json)
String schema = "WECHATPAY2-SHA256-RSA2048";
HttpUrl httpurl = HttpUrl.parse(url);

String getToken(String method, HttpUrl url, String body) {
    String nonceStr = "your nonce string";
    long timestamp = System.currentTimeMillis() / 1000;
    String message = buildMessage(method, url, timestamp, nonceStr, body);
    String signature = sign(message.getBytes("utf-8"));

return "mchid=\"" + yourMerchantId + "\","  //商户号
    + "nonce_str=\"" + nonceStr + "\","
    + "timestamp=\"" + timestamp + "\","
    + "serial_no=\"" + yourCertificateSerialNo + "\","  //商户私钥序列号
    + "signature=\"" + signature + "\"";
}

String sign(byte[] message) {
    Signature sign = Signature.getInstance("SHA256withRSA");
    sign.initSign(yourPrivateKey); //这是你的商户平台微信端签发的私钥,由下面方法加载使用
    sign.update(message);

return Base64.getEncoder().encodeToString(sign.sign());
}

String buildMessage(String method, HttpUrl url, long timestamp, String nonceStr, String body) {
    String canonicalUrl = url.encodedPath(); //有对url参数处理
    if (url.encodedQuery() != null) {
      canonicalUrl += "?" + url.encodedQuery();
    }

return method + "\n"
        + canonicalUrl + "\n"
        + timestamp + "\n"
        + nonceStr + "\n"
        + body + "\n";
}

----------------------------------------------------------------------------------------------------------------------------------------------------

对私钥证书的处理

/**
       * 获取私钥。
       * @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("无效的密钥格式");
      }
    }

微信支付 商户平台 v3 API调用 发放代金卷 经验相关推荐

  1. 微信支付(商户平台)卡券开发文档

    文章目录 简介 代金券 代金券分类 预充值代金券 免充值代金券 发券渠道 二维码发券 营销活动发券 高级API接口发券 核销方式 支付中自动核销券 操作指引 开发前准备 开通代金券权限 下载API证书 ...

  2. php微信商务平台 红包调用,微信平台红包接口怎么调用?微信支付商户平台红包发放接口调用图文教程[多图]...

    微信平台红包接口怎么调用?估计很多商家都还不太会操作吧?别着急,下面是友情小编搜集相关资料整理出来的微信支付商户平台红包发放接口调用图文教程,希望可以帮到大家,现在就跟随小编一起看看吧!!! 首先,商 ...

  3. 此IP地址不允许调用接口,如有需要请登录微信支付商户平台更改配置

    调用微信企业付款提示"此IP地址不允许调用接口,如有需要请登录微信支付商户平台更改配置". 配置步骤: 1.登录微信商户,进入产品中心,以企业付款到零钱为例,点击产品设置: 2.找 ...

  4. 微信企业付款 ”错误码:NO_AUTH,错误信息:此IP地址不允许调用接口,如有需要请登录微信支付商户平台更改配置“报错的处理办法

    提示"错误码:NO_AUTH,错误信息:此IP地址不允许调用接口,如有需要请登录微信支付商户平台更改配置" 快速解决问题!!! 解说一下这个IP:这个IP是你发起支付的服务器外网I ...

  5. node 微信红包 证书出错,请登录微信支付商户平台下载证书

    按照官方文档写的代码,测试给自己发红包时,提示证书出错,请登录微信支付商户平台下载证书. 我是用的superagent库,错误前的核心代码是: const url = 'https://api.mch ...

  6. php 微信支付 ca证书,微信公众号红包接口开发PHP开发 CA证书出错,请登陆微信支付商户平台下载证书...

    微信红包接口调试过程中一直提示"CA证书出错,请登陆微信支付商户平台下载证书",经反复调试,大致解决方法如下: 1.首先确保CA证书的路径是否正确,一定得是绝对路径,因为是PHP开 ...

  7. java 微信转账 ca_error_对接微信红包时:CA证书出错,请登录微信支付商户平台下载证书...

    今天在对接微信支付的微信红包发放时,出现""CA证书出错,请登录微信支付商户平台下载证书"的错误,特此记录一下: 如果你也在对接微信红包,并且你也在这个页面上下载了dem ...

  8. 微信 账户升级服务器地址,微信支付商户平台账户升级后有哪些新功能呢?

    注册了微信公众号的服务号,是可以再申请微信支付的,自从微信公众号的兴起,随着技术的改革和革新,微信公众号也随着做出了不少的调整和变化,首先,微信支付商户平台账户升级,这标志着微信服务好有了很多不同的地 ...

  9. 登录微信支付商户平台-产品中心,开通企业付款的方法

    2019独角兽企业重金招聘Python工程师标准>>> 登录微信支付商户平台-产品中心,开通企业付款的时候,找不到该功能,上网搜集的解决方法,亲测可行. 1.登录微信支付商户平台 2 ...

最新文章

  1. 深入理解 Spring Cloud 核心组件与底层原理
  2. 比尔盖茨宣布离开微软董事会:昔日全球首富致力于改变世界
  3. HTTP将死?又拍云布局HTTPS 护航网页安全加速
  4. 【功能升级】达摩盘3.0全新标签介绍前言
  5. “面试不败计划”:面试题基础三
  6. thinkphp mysql批量入库_ThinkPHP3.2框架使用addAll()批量插入数据的方法
  7. linux 进程间通信 dbus-glib【实例】详解三 数据类型和dteeth(类型签名type域)(层级结构:服务Service --> Node(对象、object) 等 )(附代码)
  8. java的数据类型如下所示
  9. idea提交新项目到远程git创库
  10. kbengine定义实体
  11. code vs 1013 求先序排列
  12. 制造与供应链中的人工智能行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  13. python与java前景-java和python学习哪个未来发展前景更好?
  14. java uuid 随机生成唯一序列号
  15. 嵌入式系统设计师教程笔记
  16. 管理账目的计算机软件有哪些,最好的记账软件哪个好
  17. 腾讯云人脸识别 报错 Entry name ‘assets/detector/wb_net_2_bin.rpnproto‘ collided
  18. QlikView sheet权限
  19. bugku ctf 妹子的陌陌 (想要妹子陌陌号吗? 做题来拿吧)
  20. php将阿拉伯数字转换成中文大写,PHP将阿拉伯数字转换成汉字大写支持小数点

热门文章

  1. [5G][NR] PDSCH DMRS
  2. 智能制造工业互联简述
  3. 踩坑笔记:wordpress函数之query_posts()
  4. 计算机基础——计算机网络基础
  5. 章节二:HTML基础
  6. 学习三个月,快乐小四年——感谢风变编程Python课程!
  7. Local Community Detection in Multiple Networks
  8. 高德地图上线多个城市地铁新线 数据能力持续领先
  9. 黑龙江测绘地理信息局2012年度春季事业单位公开招聘“985”院校毕业生拟录用人员名单
  10. fork的坑:文件描述符继承