栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java微信支付接入流程详解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java微信支付接入流程详解

背景

由于项目是采用java编写的,微信包括微信支付大都是php相关,于是微信支付官方文档对java的支持就不是很友好,在网上找了很多文章,基本上没有一篇是真正跑的通的,经过一番整理,先将java接入微信支付详细流程总结出来以便后续使用。

步骤一

准备阶段:已认证微信号,且通过微信支付认证,这个可以看微信文档,很详细,这里就不再重复。

步骤二

配置授权目录,官方推荐使用https类型的url,不知道http能不能行,个人也推荐使用https的保证不会错。

配置授权域名

 


步骤三

微信支付二次开发所需要的参数:

APP_ID,APP_KEY,PARTNER,PARTNER_KEY(AppSecret)

APP_ID和PARTNER_KEY(AppSecret)

PARTNER

 

APP_KEY(自行设置32位字符)

步骤四

4.1通过页面跳转到确认支付页面,其中的redirect_uri必须是配置授权目录下的


 
 支付测试
 
 
 支付测试
 

4.2 获取到openid,再经服务器向微信请求获取prepay_id,封装字段并进行签名后通过jsapi调起微信支付

网页端

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>








测试支付



 
 微信js支付测试
 
 
  • 测试支付信息[]

立即支付

<% String code = request.getParameter("code"); %>
code:<%out.print(code); %>

服务器端

@RequestMapping("/pay/payparm")
 public void payparm(HttpServletRequest request, HttpServletResponse response){
 try {
 // 获取openid
 String openId = (String) request.getSession().getAttribute("openId");
 if (openId == null) {
 openId = getUserOpenId(request);
 }
 
 String appid = WXConfig.APP_ID;
 String paternerKey = WXConfig.PERTNER_KEY;
 
 String out_trade_no = getTradeNo();
 Map paraMap = new HashMap();
 paraMap.put("appid", appid);
 paraMap.put("attach", "测试");
 paraMap.put("body", "测试购买支付");
 paraMap.put("mch_id", WXConfig.PARTNER);
 paraMap.put("nonce_str", create_nonce_str());
 paraMap.put("openid", openId);
 paraMap.put("out_trade_no", out_trade_no);
 paraMap.put("spbill_create_ip", getAddrIp(request));
 paraMap.put("total_fee", "1");
 paraMap.put("trade_type", "JSAPI");
 paraMap.put("notify_url", "http://m.ebiaotong.com/WXPay/notify");// 此路径是微信服务器调用支付结果通知路径
 String sign = getSign(paraMap, paternerKey);
 paraMap.put("sign", sign);
 // 统一下单 https://api.mch.weixin.qq.com/pay/unifiedorder
 String url = "https://api.mch.weixin.qq.com/pay/unifiedorder";
 
 String xml = ArrayToXml(paraMap);
 
 String xmlStr = HttpKit.post(url, xml);
 
 // 预付商品id
 String prepay_id = "";
 
 if (xmlStr.indexOf("SUCCESS") != -1) {
 Map map = doXMLParse(xmlStr);
 prepay_id = (String) map.get("prepay_id");
 }
 
 String timeStamp = create_timestamp();
 String nonceStr = create_nonce_str();
 Map payMap = new HashMap();
 payMap.put("appId", appid);
 payMap.put("timeStamp", timeStamp);
 payMap.put("nonceStr", nonceStr);
 payMap.put("signType", "MD5");
 payMap.put("package", "prepay_id=" + prepay_id);
 String paySign = getSign(payMap, paternerKey);
 
 payMap.put("pg", prepay_id);
 payMap.put("paySign", paySign);
 
 // 拼接并返回json
 StringBuilder sBuilder = new StringBuilder("[{");
 sBuilder.append("appId:'").append(appid).append("',")
  .append("timeStamp:'").append(timeStamp).append("',")
  .append("nonceStr:'").append(nonceStr).append("',")
  .append("pg:'").append(prepay_id).append("',")
  .append("signType:'MD5',")
  .append("paySign:'").append(paySign).append("'");
 sBuilder.append("}]");
 response.getWriter().print(sBuilder.toString());
 response.getWriter().close();
 } catch (Exception e) {
 e.printStackTrace();
 }
 }

测试结果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/138301.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号