1. 下载微信支付提供的SDK, 下载完后打开源码,install 到本地仓库。

  2. 使用微信支付 SDK,在 maven 工程中引入依赖

<dependency> <groupId>com.github.wxpay</groupId> <artifactId>wxpay-sdk</artifactId> <version>0.0.3</version> </dependency> 
  1. 主要会用到微信支付 SDK 的以下功能:
    (1) 获取随机字符串
    WXPayUtil.generateNonceStr()
    (2) MAP 转换为 XML 字符串(自动添加签名)
    WXPayUtil.generateSignedXml(param, partnerkey)
    (3) XML 字符串转换为 MAP
    WXPayUtil.xmlToMap(result)

HttpClient 工具类

package utils;import java.io.IOException;
import java.security.GeneralSecurityException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.text.ParseException;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLException;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;import org.apache.http.Consts;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLContextBuilder;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.conn.ssl.X509HostnameVerifier;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;public class HttpClient {private String url;private Map<String, String> param;private int statusCode;private String content;private String xmlParam;private boolean isHttps;public boolean isHttps() {return isHttps;}public void setHttps(boolean isHttps) {this.isHttps = isHttps;}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 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);}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) {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;}}

(1) HttpClient 通俗的讲就是模拟了浏览器的行为,如果我们需要在后端向某一地址提交数据获取结果,就可以使用 HttpClient.

(2)HttpClient 工具类使用的步骤

HttpClient client=new HttpClient(请求的url地址);
client.setHttps(true);//是否是https协议
client.setXmlParam(xmlParam);//发送的xml数据
client.post();//执行post请求
String result = client.getContent(); //获取结果 

工程搭建

引入打包好的SDK依赖 , 和HttpClient

 <dependency> <groupId>com.github.wxpay</groupId> <artifactId>wxpay-sdk</artifactId> <version>0.0.3</version>      </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId>          </dependency>
//1.调用远程接口HttpClient client = new HttpClient("https://api.mch.weixin.qq.com/pay/unifiedorder");//设置传输协议client.setHttps(true);//设置传递的参数Map<String,String> map = new HashMap<>();//微信公众账号map.put("appid",appid);//商户号map.put("mch_id",mch_id);//微信工具类提供的生成随机字符串map.put("nonce_str",WXPayUtil.generateNonceStr());//页面显示的名称,自己的公司名map.put("body","baidu");//加密方式,默认是MD5map.put("sign_type","MD5");//out_trade_no为自己生成的商品订单号map.put("out_trade_no",out_trade_no);//微信支付是以分为单位,不能有小数点map.put("total_fee",1);//IP地址map.put("spbill_create_ip","127.0.0.1");//回调地址,随便配map.put("notify_url","https://www.baidu.com");//交易类型param.put("trade_type", "NATIVE");//将map转成带有签名的XML,微信工具类提供try {String xmlParam = WXPayUtil.generateSignedXml(map,partnerkey);//发送数据System.out.println("发送数据"+xmlParam);client.setXmlParam(xmlParam);client.post();//获取返回结果String content = client.getContent();System.out.println("返回结果"+content);Map<String, String> resultMap = WXPayUtil.xmlToMap(content);//返回数据生成二维码Map codeMap = new HashMap<>();// " code_url " 就是微信支付路径codeMap.put("code_url",resultMap.get("code_url"));codeMap.put("out_trade_no",out_trade_no);codeMap.put("total_fee",total_fee);//页面接受返回的路径和金额,设置到二维码生成工具中即可return codeMap;} catch (Exception e) {// TODO Auto-generated catch blockreturn new HashMap<>();}

使用微信支付接口生成支付二维码相关推荐

  1. 怎么实现微信公众号生成专属二维码推广来源统计

    为了实现微信公众号生成专属二维码推广来源统计功能,第三方平台微号帮提供了渠道二维码生成功能实现,可以给微信公众号在线生成专属推广二维码,统计公众号各个渠道来源的粉丝,一个渠道对应一个推广二维码,可以生 ...

  2. 微信公众号生成临时二维码

    微信公众号生成临时二维码 微信公众平台生成带参数的二维码官方文档 分为三个部分: 获取access_token.通过ticket换取二维码.生成带参数的二维码 特别注意:需要有生成二维码的权限. 整个 ...

  3. 微信活动怎么生成渠道二维码?

    现在有很多运营微信公众号的小伙伴,每次看完小编分享的关于公众号营销活动的文章之后,都想知道能不能针对不同的微信营销活动生成不同的活动二维码呢?这样对于他们的微信活动推广来说会很方便,所以今天小编就拿微 ...

  4. 微信支付接口调用之二维码失效时间的设置

    今天解决了测试提交上来的一个bug,说是公司网站调用的二维码接口没有做超时失效处理,这种情况容易导致用户账号登出后,该二维码还是有效的,当用户扫描支付时还是能够支付成功,但是微信支付成功后调用我们配置 ...

  5. 【黄啊码】PHP配合微信公众号生成推广二维码

    前言 为了满足用户渠道推广分析和用户帐号绑定等场景的需要,公众平台提供了生成带参数二维码的接口.使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送. 1.目前有2种类型的 ...

  6. 微信蓝牙设备开发--添加设备以及获取微信为设备生成的二维码

    1.添加设备 登录微信开发平台 2.开始添加设备 开始添加设备内容 最后直接添加就行 3.生成二维码 写一个http请求 package com.rinlink.intelligent.test;im ...

  7. Node.JS调用企业微信API:生成渠道二维码

    目标: 通过API设置成员的"联系我"方式生成渠道标识二维码,实现标记客户扫码渠道,方便个渠道客户信息统计等. 实现环境: 白码低代码平台(该平台提供企业微信API,可直接调用,减 ...

  8. 微信,支付宝,收款二维码实时生成订单监控,免签支,付支付系统,个人收款,收款二维码...

    微信,支付宝,收款二维码实时生成订单监控,免签支,付支付系统,个人收款,收款二维码 微信和支付宝个人支付二维码生成与监控!有PHP接口回调,个人收款好助手! 实现收款即时到个人微信或支付宝账户!方便安 ...

  9. 微信支付 生成付款二维码链接 并生成支付二维码图片 .net C#

    //生成付款二维码链接                 string pay_url = PayURL(order_id_parent.ToString(), _total_fee.ToString( ...

  10. 深入支付宝支付扫描支付-跳转支付宝二维码页面支付与自定义生成二维码支付-1参数配置篇

    这里较详细总结一下支付宝扫码支付,从三个方面总结 ①参数配置 ②跳转固定的支付宝页面进行扫码支付 ③自定义二维码扫码支付 参数配置-开放平台相关配置(沙箱环境) 刚开始支付宝的配置参数还是有点让人懵逼 ...

最新文章

  1. 提高班第三周周记(中秋第三天)
  2. [USACO08JAN]Cell Phone Network G 树形dp
  3. Java 线程池的介绍以及工作原理
  4. Java中常见的5种WEB服务器介绍
  5. CentOS 程序开机自启动方法总结
  6. 阿里云centos 安装和配置 DokuWiki
  7. 机器学习数据集哪里找:最佳数据集来源盘点
  8. 《纽约时报》:乔布斯是伟大的暴君
  9. python基础知识-Python学习--最完整的基础知识大全
  10. 2014ACM/ICPC亚洲区西安站 F题 color (组合数学,容斥原理)
  11. 仿WPS PDF阅读器
  12. 宗地图绘制要求和规范_地籍图、宗地图、房产图的制图规范
  13. 自定义更改虚拟机中Ubuntu的ip地址
  14. w10桌面计算机图标箭头去除,win10桌面图标有个箭头如何去掉_去掉win10桌面图标箭头的方法-系统城...
  15. [完全图解].NET Croe 使用JWT验证签名
  16. 正弦余弦指引的乌鸦搜索算法-附代码
  17. Openlayers记录(七)利用ol3进行缓冲区的空间相交分析
  18. 线性规划求极值问题-系统架构设计师-最“稳准狠”解题方法
  19. C2248: QString::QString: 无法访问 private 成员(在 QString 类中声明)
  20. 软考中级软件设计师---系统开发基础

热门文章

  1. git时光穿梭机总结
  2. 15数字华容道解法 图解_数字华容道最后一行技巧 数字华容道教学步骤
  3. android原生代码转h5,Android原生和H5交互;Android和H5混合开发;WebView点击H5界面跳转到Android原生界面。...
  4. Vue3 - Element plus 实现 “带分页“ 表格组件,实现跨页进行 “分页勾选“ 的多选功能(解决分页表格组件 <el-table> 跨页后已前勾选的行自动消失问题)详细示例解决教程
  5. linux mysql dengl_linux环境搭建(四)--MYSQL
  6. 构建根文件系统的/dev目录
  7. Oracle 数据库备份脚本
  8. 简单的注册表代码记录
  9. 中班音乐活动计算机反思,中班音乐优质教案《计算器》含反思
  10. 电子烟创业大军,都去卖酒了