准备工作:
private static PrivateKey merchantPrivateKey;

static {
try {
merchantPrivateKey = PemUtil.loadPrivateKey(new ByteArrayInputStream(WXConfig.PRIVATE_KEY.getBytes(“utf-8”)));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
WXConfig为证书,密钥文件 这里PRIVATE_KEY 为apiclient_cert.p12 文件密钥值

定义公共方法:
public class PemUtil {

/*** 本地密钥默认申请* @param inputStream* @return java.security.PrivateKey* @exception * @date 2021/4/6 11:26* @author **/
public static PrivateKey loadPrivateKey(InputStream inputStream) {try {ByteArrayOutputStream array = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int length;while((length = inputStream.read(buffer)) != -1) {array.write(buffer, 0, length);}String privateKey = array.toString("utf-8").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 var6) {throw new RuntimeException("当前Java环境不支持RSA", var6);} catch (InvalidKeySpecException var7) {throw new RuntimeException("无效的密钥格式");} catch (IOException var8) {throw new RuntimeException("无效的密钥");}
}/*** 证书验证* @param inputStream* @return java.security.cert.X509Certificate* @exception * @date 2021/4/6 11:26* @author**/
public static X509Certificate loadCertificate(InputStream inputStream) {try {CertificateFactory cf = CertificateFactory.getInstance("X509");X509Certificate cert = (X509Certificate)cf.generateCertificate(inputStream);cert.checkValidity();return cert;} catch (CertificateExpiredException var3) {throw new RuntimeException("证书已过期", var3);} catch (CertificateNotYetValidException var4) {throw new RuntimeException("证书尚未生效", var4);} catch (CertificateException var5) {throw new RuntimeException("无效的证书", var5);}
}

}

微信支付统一下单

    @PostMapping("/wx/v3/getPreyId")public JsonResult getPreyId(@RequestBody PayParam payParam) throws Exception {//订单金额  总金额是以分的形式来体现的 请APP 端数据统一处理Amount amount = new Amount().setTotal(payParam.getTotalMoney())  //订单总金额.setCurrency("CNY");                 //CNY:人民币,境内商户号仅支持人民币UnifiedOrderModel unifiedOrderModel = new UnifiedOrderModel().setAppid(WXConfig.APP_ID)      //直连商户在开放平台申请的应用appid.setMchid(WXConfig.MCH_ID)     //直连商户的商户号,由微信支付生成并下发.setDescription("商品描述")       //商品描述.setOut_trade_no(payParam.getOrderNum())    //商户系统内部订单号,只能是数字、大小写字母_-*且在同一个商户号下唯一.setNotify_url(WXConfig.NOTIFY_URL)         //通知URL必须为直接可访问的URL,不允许携带查询串  //用于支付成功回调接口.setAmount(amount);                         //订单金额IJPayHttpResponse response = WxPayApi.v3(RequestMethod.POST,          //请求方式WxDomain.CHINA.toString(),   //存放微信自己内部地址WxApiType.APP_PAY.toString(), //微信内部封装的统一下单接口WXConfig.MCH_ID,              //商户IdWXConfig.MCH_SERIAL_NO,       //商户证书序列号null,merchantPrivateKey,           //密钥JSONUtil.toJsonStr(unifiedOrderModel));String body = response.getBody();//数字签名是否有效String timestamp = response.getHeader("Wechatpay-Timestamp");String nonceStr = response.getHeader("Wechatpay-Nonce");String signature = response.getHeader("Wechatpay-Signature");boolean verifySignature = WxPayKit.verifySignature(signature, body, nonceStr, timestamp,new ClassPathResource(WXConfig.PLATFORM_CERT_PATH).getInputStream());//System.out.println(verifySignature);return JsonResult.buildSuccess("ok", body);}

亲测有效

微信V3 - 微信支付统一下单 --01相关推荐

  1. 微信小程序支付统一下单接口and异步回调

     统一下单接口: <?phpnamespace pay;class WxPay {protected $appid;protected $mch_id;protected $key;protec ...

  2. 微信小程序之统一下单

    统一下单 话不多说上效果图 微信小程序支付 统一下单需要的参数 Java后端代码 小程序端代码 话不多说上效果图 微信小程序支付 1.需要企业或者个体工商户申请,个人主体小程序不支持开通微信支付 2. ...

  3. 微信支付 统一下单 字段 body 为中文时 报【签名错误】解决方案(C# SDK)

    微信支付 统一下单 字段 body 为中文时 报[签名错误]解决方案(C# SDK) 参考文章: (1)微信支付 统一下单 字段 body 为中文时 报[签名错误]解决方案(C# SDK) (2)ht ...

  4. APP 对接 java 微信支付统一下单接口

    首先插入微信支付的时序图 统一下单时候的请求对象,需要把这个转为xml 文件格式所以需要在pom.xml 文件中导入 .和微信支付的sdk <dependency> <groupId ...

  5. 微信支付-----统一下单接口对接

    本以为没有机会接触鼎鼎大名的支付宝和微信接口(公司本身是做第三方支付的),最近由于一个售货机项目需要对接银联,支付宝和微信接口,因为我自身已经对接了银联,之后根据安排,由我对接微信的相关接口.话不多说 ...

  6. SpringBoot实现小程序微信支付统一下单

    SpringBoot实现微信支付统一下单 最近做小程序有需要用到微信支付,而在页面拉起微信支付前需要先进行统一下单,然后再返回参数给前端调用微信支付wx.requestPayment.网上参考了很多代 ...

  7. 【微信支付统一下单】JAVA与XML请求内容体的双向映射

    在微信支付统一下单接口文档中,请求体body和微信端返回值都是xml格式的内容. 例如: <!-- 请求微信端的内容 ---> <xml><appid>wx2421 ...

  8. 微信支付统一下单,签名错误

    测试白名单也已设置. 请求路径:https://api.mch.weixin.qq.com/pay/unifiedorder 1.参数拼接(回车排序一下方便看): appid=wxb5e39527f2 ...

  9. 微信开发------------公众号支付统一下单整个流程

    申请微信支付在这里:https://blog.csdn.net/dmw412724/article/details/82735906 微信支付后台搭建(阅读本文的基础):https://blog.cs ...

最新文章

  1. 在pcDuino上使用蓝牙耳机玩转音乐
  2. Rsyslog分类过略消息关键字收集程序日志
  3. nrf51822-主从通信分析2
  4. 面向对象和面向过程的区别个人觉得是目前解释最好的
  5. scratch跳一跳游戏脚本_cocos creator制作微信小游戏「跳一跳」
  6. 初学者选黑卡还是微单_零基础,一篇读懂单反和微单
  7. 【Redis】Redis 基础知识 常用命令 命令积累
  8. 【Java学习笔记】修饰符
  9. 百度统计:页面代码安装状态:代码未生效
  10. 大话Linux之 跟我走吧,现在就出发[2]Linux我想和你在一起(2)Vim,vim,I love you!有图有真相!
  11. 防止登录成功后重复刷新页面跳回登录页面
  12. 使用photoshop将图片制作成圆形
  13. 计算机软件专利法保护对象,下列不属于专利法所保护对象的是( )
  14. 软考对找工作有帮助吗?
  15. GNURadio中的PMTs(Polymorphic Types)数据类型
  16. 胖东来创始人:加班是不道德,是无耻行为,人不能只是挣钱
  17. 中兴服务器管理口地址,跪求!!!怎么获取服务器管理口的IP地址???
  18. 10个设计最经典的web2.0网站
  19. 删除需要管理员权限的文件
  20. 小白在“风变编程”上的Python入门之旅

热门文章

  1. 在微控制器平台等小型物联网设备上运行 JavaScript
  2. 获取windows系统ip、计算机名、当前用户名
  3. 本地spa应用的nginx简单配置
  4. 美度手表官网了解美度手表好去处
  5. java横向导出excel_Java中导入、导出Excel
  6. SpringBoot 代码结构
  7. [Android] android 实现加速小火箭动画效果 位移+透明渐变 动画
  8. 处理器架构 (十五) 国产cpu芯片与架构
  9. 使用八爪鱼采集器抓取上市公司财报,一次1万条
  10. AI创业有风险,起步需谨慎!创业者从准备到失败~