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. 《转》VMware vSphere 5.1 学习系列之四:安装 SQL Server 数据库
  2. Bug邮件队列插入不了
  3. 兄弟3150cdn加粉后清零_兄弟MFC1618MFC1816 tn1035加粉清零方法
  4. python怎么开始打代码_Python代码写好了怎么运行?
  5. python变量作用域图解_简单了解Python变量作用域正确使用方法
  6. jspx格式手机打开_zip格式的文件怎么打开,手机和电脑的操作方法一样吗?
  7. 简述整车级电子电器架构开发内容
  8. 【小月电子】ALTERA FPGA开发板系统学习教程-LESSON5数码管动态显示
  9. Windows权限维持
  10. matlab如何求有约束最优化最大值,6.4.2有约束最优化问题的求解-东北大学数学系.ppt...
  11. 先序序列和后序序列并不能唯一确定二叉树
  12. ActiveX控件的注册和反注册
  13. linux下通过串口ftp,eftp简单文件传输工具支持串口、网络、Windows、Linux、单片机平台-博客...
  14. 关于Gooey复选框CheckBox的使用
  15. python中的科学计数法表示
  16. NVDIA Jetson TX2软件介绍
  17. GNSS时钟的频漂计算公式推导
  18. iOS10通知框架UserNotification理解与应用
  19. 淘宝规则大改动,中差评取消了,对于中小卖家来说是否是福利?
  20. QT 事件类型1000个你知道多少?

热门文章

  1. Jav安全框架Shiro学习总结(1)
  2. 绝对收敛级数重排定理的证明
  3. osgEarth编译——以VS2012为例
  4. 教育类型网站用户体验分析——以UMU学习平台、学生安全教育平台、师路南通为例...
  5. 如何用微信公众号快速注册小程序
  6. 关于Cocos2d-x节点和精灵节点的坐标、位置以及大小的设置
  7. CSS单行文本和多行文本
  8. WIN7 错误代码0x80070005怎么办
  9. 【女装2018新款潮碎花半身裙韩版气质两件套裙子】http://m.tb.cn/h.3aHr1L7
  10. PHP实现微信的时间显示方式