对接微信支付接口

SpringBoot中对接微信支付接口

1.微信支付开发文档

https://pay.weixin.qq.com/wiki/doc/api/index.html

1.准备工作:

在微信上申请服务号类型的公众号,从公众号获取以下数据

  1. appid:微信公众账号或开放平台APP的唯一标识

  2. mch_id:商户号 (配置文件中的partner)

  3. partnerkey:商户密钥

    2.根据项目需求选择适合的支付方式,本例使用Native支付方式

在这里插入图片描述

点击查看文档->API列表

在这里插入图片描述

开发步骤

引入依赖

<dependency><groupId>com.github.wxpay</groupId><artifactId>wxpay-sdk</artifactId><version>0.0.3</version>
</dependency>

修改application.proerties配置文件

#关联的公众号appid #商户号 #商户key
weixin.appid=wx34bb2aa123de3dcd
weixin.partner=1611167878
weixin.partnerkey=4ca478a4580794e2f7cf67881cb21dd4b1

参数注入:

@Component
public class PropertiesUtils implements InitializingBean {@Value("${weixin.appid}")private String appid;@Value("${weixin.partner}")private String partner;@Value("${weixin.partnerkey}")private String partnerkey;public static String APPID;public static String PARTNER;public static String PARTNERKEY;@Overridepublic void afterPropertiesSet() throws Exception {APPID = appid;PARTNER = partner;PARTNERKEY = partnerkey;}
}

HttpClient工具类:

用于发送http请求,可直接复制

/*** http请求客户端*/
public class HttpClient {private String url;private Map<String, String> param;private int statusCode;private String content;private String xmlParam;private boolean isHttps;private boolean isCert = false;//证书密码 微信商户号(mch_id)private String certPassword;public boolean isHttps() {return isHttps;}public void setHttps(boolean isHttps) {this.isHttps = isHttps;}public boolean isCert() {return isCert;}public void setCert(boolean cert) {isCert = cert;}public String getXmlParam() {return xmlParam;}public void setXmlParam(String xmlParam) {this.xmlParam = xmlParam;}public HttpClient(String url, Map<String, String> param) {this.url = url;this.param = param;}public HttpClient(String url) {this.url = url;}public String getCertPassword() {return certPassword;}public void setCertPassword(String certPassword) {this.certPassword = certPassword;}public void setParameter(Map<String, String> map) {param = map;}public void addParameter(String key, String value) {if (param == null)param = new HashMap<String, String>();param.put(key, value);}public void post() throws ClientProtocolException, IOException {HttpPost http = new HttpPost(url);setEntity(http);execute(http);}public void put() throws ClientProtocolException, IOException {HttpPut http = new HttpPut(url);setEntity(http);execute(http);}public void get() throws ClientProtocolException, IOException {if (param != null) {StringBuilder url = new StringBuilder(this.url);boolean isFirst = true;for (String key : param.keySet()) {if (isFirst)url.append("?");elseurl.append("&");url.append(key).append("=").append(param.get(key));}this.url = url.toString();}HttpGet http = new HttpGet(url);execute(http);}/*** set http post,put param*/private void setEntity(HttpEntityEnclosingRequestBase http) {if (param != null) {List<NameValuePair> nvps = new LinkedList<NameValuePair>();for (String key : param.keySet())nvps.add(new BasicNameValuePair(key, param.get(key))); // 参数http.setEntity(new UrlEncodedFormEntity(nvps, Consts.UTF_8)); // 设置参数}if (xmlParam != null) {http.setEntity(new StringEntity(xmlParam, Consts.UTF_8));}}private void execute(HttpUriRequest http) throws ClientProtocolException,IOException {CloseableHttpClient httpClient = null;try {if (isHttps) {if(isCert) {FileInputStream inputStream = new FileInputStream(new File(ConstantPropertiesUtils.CERT));KeyStore keystore = KeyStore.getInstance("PKCS12");char[] partnerId2charArray = certPassword.toCharArray();keystore.load(inputStream, partnerId2charArray);SSLContext sslContext = SSLContexts.custom().loadKeyMaterial(keystore, partnerId2charArray).build();SSLConnectionSocketFactory sslsf =new SSLConnectionSocketFactory(sslContext,new String[] { "TLSv1" },null,SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);httpClient = HttpClients.custom().setSSLSocketFactory(sslsf).build();} else {SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {// 信任所有public boolean isTrusted(X509Certificate[] chain,String authType)throws CertificateException {return true;}}).build();SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext);httpClient = HttpClients.custom().setSSLSocketFactory(sslsf).build();}} else {httpClient = HttpClients.createDefault();}CloseableHttpResponse response = httpClient.execute(http);try {if (response != null) {if (response.getStatusLine() != null)statusCode = response.getStatusLine().getStatusCode();HttpEntity entity = response.getEntity();// 响应内容content = EntityUtils.toString(entity, Consts.UTF_8);}} finally {response.close();}} catch (Exception e) {e.printStackTrace();} finally {httpClient.close();}}public int getStatusCode() {return statusCode;}public String getContent() throws ParseException, IOException {return content;}
}

到此准备工作结束,剩下的就是参考微信支付开发文档,提供微信支付接口所需参数和获取请求结果,从结果中取出我们所需的数据

准备微信支付所需参数

//对接微信支付//组装数据Map<String, String> paramMap = new HashedMap<>();paramMap.put("appid", PropertiesUtils.APPID); //公众号appidparamMap.put("mch_id",PropertiesUtils.PARTNER); //商户号paramMap.put("out_trade_no",orderInfo.getOutTradeNo());  //商户订单号paramMap.put("nonce_str", WXPayUtil.generateNonceStr()); //随机字符串String object = orderInfo.getReserveDate()+"就诊"+ orderInfo.getDepname();paramMap.put("body",object); //商品描述//paramMap.put("total_fee", order.getAmount().multiply(new BigDecimal("100")).longValue()+"");paramMap.put("total_fee","1"); //支付金额paramMap.put("spbill_create_ip","127.0.0.1"); //用户的客户端IPparamMap.put("notify_url", "https://2495161sb6.goho.co/api/order/weixinPay/weixinNotify");//微信支付结果通知的回调地址paramMap.put("trade_type", "NATIVE"); //交易类型

: total_fee 属性为支付金额,单位是分

微信支付接口地址: https://api.mch.weixin.qq.com/pay/unifiedorder

调用接口,发送Http请求

//对接微信支付
HttpClient httpClient = new HttpClient("https://api.mch.weixin.qq.com/pay/unifiedorder");httpClient.setXmlParam(WXPayUtil.generateSignedXml(paramMap,ConstantPropertiesUtils.PARTNERKEY));
//微信接口为https请求,告诉httpClient改请求为https
httpClient.setHttps(true);
httpClient.post();

接收返回值,获取所需数据

 //获取响应数据String content = httpClient.getContent();Map<String, String> resultMap = WXPayUtil.xmlToMap(content);//以下字段在return_code和result_code都为SUCCESS的时候有返回if(resultMap.get("return_code").equals("SUCCESS")&&resultMap.get("result_code").equals("SUCCESS")) {map = new HashMap<>();map.put("orderId", orderId); //订单idmap.put("totalFee", orderInfo.getAmount()); map.put("resultCode", resultMap.get("result_code"));map.put("codeUrl", resultMap.get("code_url")); //二维码链接}

查询订单退款等操作参考下单即可

map = new HashMap<>();
map.put(“orderId”, orderId); //订单id
map.put(“totalFee”, orderInfo.getAmount());
map.put(“resultCode”, resultMap.get(“result_code”));
map.put(“codeUrl”, resultMap.get(“code_url”)); //二维码链接
}


查询订单退款等操作参考下单即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/34697.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手把手教你如何在Java在Excel中进行数据分析

摘要&#xff1a;本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 前一段时间淘宝出了一个“淘宝人生”的模块&#xff0c;可以看从注册淘宝账号至今的消…

文心一格:文心一格发布会图文摘要及与ChatGPT对此分析

文章目录 [toc]简介1.文学创作二、商业文案创作三、数理逻辑推算四、中文理解五、[多模态](https://so.csdn.net/so/search?q多模态&spm1001.2101.3001.7020)生成六、原理分析七、社会反响小结 简介 GPT-4发布一天之后&#xff0c;压力全部给到百度这边。就在刚刚&#x…

​​​​​​​NLP之TEA:基于python编程(jieba库)实现中文文本情感分析(得到的是情感评分)

NLP之TEA&#xff1a;基于python编程(jieba库)实现中文文本情感分析(得到的是情感评分) 目录 输出结果 设计思路 相关资料 1、关于代码 2、关于数据集 关于留言 1、留言内容的注意事项 2、如何留言&#xff1f; 2.1、第一种方法——在对应的博客下留言 2.2、备用第二…

Linux输密码不显示

Linux是一个安全性比较强的的操作系统&#xff0c;所以输入密码的时候是不会显示的&#xff0c;但是它会记忆用户输入的密码&#xff0c;所以一般还是不要把密码设置的太复杂了。不然

Git 命令行账号密码输入错误解决方法

场景&#xff1a;git操作仓库&#xff0c;第一次弹窗输入账号密码不正确&#xff0c;后续不再弹窗。且后续操作无法进行。 在命令行里使用git 提交时弹出让输入git账号密码输错一次后续就不会再弹出来了&#xff08;它这里和在IDEA里使用不太一样&#xff0c;IDEA好找且他会重…

ubuntu 虚拟终端登录 incorrect 无法输入密码

问题过程&#xff1a; 1.服务器ubuntu 18.04版本&#xff0c;在使用sudo命令时出现以下问题&#xff1a; sudo xxx Sorry, try again. Sorry, try again. sudo: 3 incorrect password attempts 细节&#xff1a;在输入sudo命令敲击回车后&#xff0c;没有任何输入和操作&#…

pgsql命令行直接输入密码登录

问题描述 我怎么登录&#xff0c;都要求输入密码&#xff0c;如图&#xff1a; 查看如下参数 Connection options: -h, --hostHOSTNAME database server host or socket directory (default: “local socket”) -p, --portPORT database server port (default: “5432”) -U, …

关于MySQL输入密码却无法正常登录的情况解决

有时候即使输入了正确密码也无法进入MySQL。 你只需要打开任务管理器&#xff0c;找到“服务“一栏”&#xff0c;找到MySQL 右击-> 开始 然后在输入密码就能进了

Centos系统输入密码是对的,为啥登录不了,教你简单解决

centos密码规则&#xff1a; 新密码中至少需要一个大写字符 新密码中至少需要一个小写字符 新密码中至少需要一位数字 我的秘密是Asd25781 按Caps lock调成大写 这里可以看到有显示大写提醒 提醒错误&#xff0c;请重新输入 同时安装shift键和要输入的大写字母即可登录。结…

登录框输入正确无法登录

登录框输完了正确信息点击登录就会把你的信息全部清除掉&#xff0c;而没有登录。 问题描述&#xff1a; 登录框输完了正确信息点击登录就会把你的信息全部清除掉&#xff0c;而没有登录。 解决方案&#xff1a; 看下面的图&#xff0c;是我Google插件ModHeader的影响&#x…

Linux命令行窗口无法输入密码

今天碰到一个问题&#xff0c;准备下载gcc编译器的&#xff0c;执行了sudo命令下载&#xff0c;但是当要输入密码验证的时候&#xff0c;发现输入密码&#xff01;&#xff01;&#xff01;&#xff01; 解决&#xff1a;其实不是无法输入密码&#xff0c;是Linux命令行窗口输…

计算机带来好处坏处的英语作文,关于电脑的好处与坏处的英语作文

电脑&#xff0c;大家并不陌生&#xff0c;电脑能带给我们什么呢? 我觉得电脑是我们学习中的好伙伴&#xff0c;电脑可以用来查资料&#xff0c;电脑可以用来看你最想了解的新闻&#xff0c;电脑可以用来写博文&#xff0c;发表你自己的文章&#xff0c;发表你... 在这日新月异…

关于计算机的好处的英语作文,关于电脑好处的英语作文

电脑&#xff0c;大家并不陌生&#xff0c;电脑能带给我们什么呢? 我觉得电脑是我们学习中的好伙伴&#xff0c;电脑可以用来查资料&#xff0c;电脑可以用来看你最想了解的新闻&#xff0c;电脑可以用来写博文&#xff0c;发表你自己的文章&#xff0c;发表你... 都说二十一世…

大量优化研发人员,抱腿大客户,四方伟业如何脱困?

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 近日&#xff0c;成都四方伟业软件股份有限公司&#xff08;简称“四方伟业”&#xff09;提交了首轮问询回复函。本次问询共涉及产品及市场地位、核心技术、独立性及关联交易、收入、销售模式及客户、期间费用及股份支付、…

专访惠众科技|元宇宙应用如何借助3DCAT实时云渲染实现流畅大并发呈现?

当前互联网流量红利已经逐渐消失&#xff0c;营销同质化愈发严重。在这样的背景下&#xff0c;催生了以为元宇宙 焦点的虚拟产业经济。元宇宙在各行各业中以不同形式快速萌生、成长&#xff0c;呈现出多元化的应用场景。尤其是众多品牌&#xff0c;将元宇宙视为品牌建设与营销新…

虚幻5再次炸场!1部iPhone搞定3A大作级动作捕捉,网友:游戏行业要变天

Pine 鱼羊 发自 凹非寺量子位 | 公众号 QbitAI 什么样的新技术&#xff0c;能在ChatGPT的包围圈里脱颖而出火爆全场&#xff1f; 一部iPhone&#xff0c;两分钟&#xff0c;真人大变数字人&#xff01; 还是表情动态、眼神细节一比一还原的那种。 没错&#xff0c;动作捕捉视频…

人工智能资料下载地址分享

人工智能资料下载地址分享 800G人工智能学习资料下载链接 链接: https://pan.baidu.com/s/1eSnAZse 密码: j9sk 人工智能图书馆 人工智能学术论文资料下载链接&#xff1a; 链接: https://pan.baidu.com/s/1eSCD8Tc 密码: itu1 人工智能融资资料库下载链接&#xff1a; 链接: …

又一个微信聊天机器人横空出世了,人人可用

之前给大家分享过一个微信机器人&#xff1a;一个15分钟的视频&#xff0c;教你用Python创建自己的微信聊天机器人&#xff01; 但是这个机器人&#xff0c;需要基于网页版才能用&#xff1b;然而很多朋友的微信&#xff0c;是不能登录网页版微信的。 有没有一种微信机器人&am…

ChatGPT 是什么?九州链接跟人工智慧有什么不同?

有疑难杂症需要解答&#xff1f;九州链接娜娜专员KW9㍠ㄇEㄒ提供&#xff0c;找ChatGPT&#xff1b;写程式需要帮忙&#xff1f;找ChatGPT&#xff1b;阅读论文整理摘要&#xff1f;找ChatGPT。 短短两个月快速累积到上亿使用者的ChatGPT 热潮持续延烧。而背后的微软和OpenAI 近…

两万字长文带你全面解读生成式人工智能

本文首发于微信公众号 CVHub&#xff0c;未经授权不得以任何形式售卖或私自转载到其它平台&#xff0c;仅供学习&#xff0c;违者必究&#xff01; 0. 导读 随着ChatGPT的病毒式传播&#xff0c;生成式人工智能(AIGC, a.k.a AI-generated content&#xff09;因其分析和创造文本…