当前位置: 首页 > wzjs >正文

网站建设 域名 空间网站快速收录软件

网站建设 域名 空间,网站快速收录软件,公司网站 制作,本科自考需要考哪些科目第一个问题,使用正常的V3支付,返回无可用的平台证书,请在商户平台-API安全申请使用微信支付公钥。 报错如下 httpResponseBody[{"code":"RESOURCE_NOT_EXISTS","message":"无可用的平台证书&#xff0c…

第一个问题,使用正常的V3支付,返回无可用的平台证书,请在商户平台-API安全申请使用微信支付公钥。

报错如下

httpResponseBody[{"code":"RESOURCE_NOT_EXISTS","message":"无可用的平台证书,请在商户平台-API安全申请使用微信支付公钥。可查看指引https://pay.weixin.qq.com/docs/merchant/products/platform-certificate/wxp-pub-key-guide.html"}]	

解决办法:
首先因为因为我们使用了微信公钥调起支付,商户可使用微信支付的公钥验证应答和回调的签名,可使用微信支付公钥和公钥ID初始化。所以不能使用原来的RSAAutoCertificateConfig来创建支付配置,而要使用RSAPublicKeyConfig。支付的maven从0.2.12升级到0.2.14才有RSAPublicKeyConfig。
在微信支付Github也更新了最新的微信V3公钥支付的调用:wechatpay-java

  • 旧依赖和代码
    maven
 <dependency><groupId>com.github.wechatpay-apiv3</groupId><artifactId>wechatpay-java</artifactId><version>0.2.12</version></dependency>

代码

Config config = new RSAAutoCertificateConfig.Builder().merchantId(merchantId).merchantSerialNumber(merchantSerialNumber).privateKeyFromPath(privateKeyPath).apiV3Key(apiV3Key).build();
  • 新的依赖和代码

依赖

<dependency><groupId>com.github.wechatpay-apiv3</groupId><artifactId>wechatpay-java</artifactId><version>0.2.14</version>
</dependency>

代码

Config config =new RSAPublicKeyConfig.Builder().merchantId(merchantId).privateKeyFromPath(privateKeyPath).publicKeyFromPath(publicKeyPath).publicKeyId(publicKeyId).merchantSerialNumber(merchantSerialNumber).apiV3Key(apiV3Key).build();

第二个问题,以上改好发送获取支付的链接,报错:java.lang.IllegalArgumentException: Illegal base64 character 2d

异常部分有用完整报文:

java.lang.IllegalArgumentException: Illegal base64 character 2dat java.util.Base64$Decoder.decode0(Base64.java:714)at java.util.Base64$Decoder.decode(Base64.java:526)at java.util.Base64$Decoder.decode(Base64.java:549)at com.wechat.pay.java.core.util.PemUtil.loadPublicKeyFromString(PemUtil.java:90)at com.wechat.pay.java.core.util.PemUtil.loadPublicKeyFromPath(PemUtil.java:128)at com.wechat.pay.java.core.RSAPublicKeyConfig$Builder.publicKeyFromPath(RSAPublicKeyConfig.java:96)at com.zhjs.service.impl.TestPay.nativePay(TestPay.java:75)at com.zhjs.controller.TestController.test(TestController.java:32)at com.zhjs.controller.TestController$$FastClassBySpringCGLIB$$f90b7656.invoke(<generated>)at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)

报错原因和解决办法
原因是:.publicKeyFromPath(publicKeyPath)输入公钥路径的时候我输入是apiclient_cert.pem,所以导致报错,用错证书了。
解决办法:去下载V3的公钥pub_key.pem。

下载的步骤如下图:
请添加图片描述
请添加图片描述
原代码:

/*** 公钥路径*/
private String publicKeyPath = "data/testPay/apiclient_cert.pem";

新代码

/*** 公钥路径*/
private String publicKeyPath = "data/testPay/pub_key.pem";

换成新的公钥pub_key.pem的路径就可以正常吊起支付了

完整代码

次测试使用的是Native下单
代码做个参考

public class TestPay {/*** 商户号*/private String merchantId = "xxxxxxx";/*** 私钥路径*/private String privateKeyPath = "data/testPay/apiclient_key.pem";/*** 公钥路径*/private String publicKeyPath = "data/testPay/pub_key.pem";/*** 商户APIv3密钥公钥*/private String publicKeyId = "xxxxxx";/*** 商户API证书序列号*/private String merchantSerialNumber = "xxxxxxxx";/*** APIv3密钥*/private String apiV3Key = "xxxxxxxxxx";/*** appid*/private String appId = "xxxxxxxx";/*** Native下单*/public Map<String, Object> nativePay() {//创建支付配置Config config =new RSAPublicKeyConfig.Builder().merchantId(merchantId).privateKeyFromPath(privateKeyPath).publicKeyFromPath(publicKeyPath).publicKeyId(publicKeyId).merchantSerialNumber(merchantSerialNumber).apiV3Key(apiV3Key).build();//1.0创建支付服务NativePayService service = new NativePayService.Builder().config(config).build();//2.0创建预支付请求体PrepayRequest prepayRequest = new PrepayRequest();prepayRequest.setAppid(appId); //appidprepayRequest.setMchid(merchantId); //商户号//2.1 商品描述prepayRequest.setDescription("test");//2.2 todo 商户订单号 随机生成Utility.generateRandomString(16)是随机生成的 换成你自己的prepayRequest.setOutTradeNo(Utility.generateRandomString(16));//2.3 支付超时时间prepayRequest.setTimeExpire(Utility.getTimeFactory());//2.4 todo 回调地址prepayRequest.setNotifyUrl("https://www.baidu.com/xxxxxx");//2.5 todo 附加信息 创建一个 JSON 对象 不需要可以删除JSONObject jsonObjectAttach = new JSONObject();jsonObjectAttach.put("orId", "xxx");jsonObjectAttach.put("orStatus", "xxxx");prepayRequest.setAttach(jsonObjectAttach.toJSONString());//2.6订单金额Amount amount = new Amount();//金额 1=0.01amount.setTotal(100);amount.setCurrency("CNY");prepayRequest.setAmount(amount);//3.0 调用接口PrepayResponse prepay = service.prepay(prepayRequest);//打印支付结果System.out.println(prepay);Map<String, Object> map = new HashMap<>();map.put("data",prepay.getCodeUrl());return map;}
}
http://www.dtcms.com/wzjs/166749.html

相关文章:

  • 南城网站建设公司方案网络推广营销培训机构
  • 网站搜索推广销售西安seo阳建
  • b2c网站建设 广州外贸平台有哪些?
  • wordpress两个站点文章同步谷歌seo服务公司
  • 延吉市住房城乡建设局官方网站如何去做网络营销
  • 动态网站和静态网站区别b2b电子商务网
  • 做秒杀网站网站优化排名金苹果下拉
  • 宿迁企业网站建设附近的教育培训机构有哪些
  • 高端网站优化成都网站seo费用
  • 书香气的域名做网站重庆网站建设外包
  • 模板网站建设开发google推广怎么做
  • wordpress二维码活码旅游企业seo官网分析报告
  • 网站建设第一步怎么弄现在广告行业好做吗
  • 请教个人主页网站怎么做啊百度站长工具seo查询
  • 卷帘门怎么做网站网页
  • 诺尔诺达网站建设百度网盟
  • 平台型网站如何推广学历提升哪个教育机构好一些
  • 专业做蛋糕的网站今日头条新闻手机版
  • 直播网站建设需要什么软件培训心得体会500字
  • 网站提高内容的丰富度创意怎么在百度上添加自己的店铺地址
  • 如何让网站快速被收录成人营销管理培训班
  • 做市级网站需要什么找做网站的公司
  • 做网站的把网站写成一行百度广告收费
  • 网页设计实训报告的目的网站优化是做什么的
  • 宿迁做网站哪家好宁波seo外包服务
  • 网站怎么申请微信支付seo排名首页
  • 国际贸易网站排名技能培训网站
  • 谷歌seo怎么提高网站权重竞价运营是做什么的
  • 简述网站开发岗位及职务日照seo优化
  • 怎么做网站的图片关键词工具软件