Java微信支付之服务号支付代码示例
短信预约 -IT技能 免费直播动态提醒
Java微信支付之服务号支付实现,网上的java微信支付sdk和Demo基本上是水的,看着头疼所以我决心自己开始写Java微信支付之公众号支付,多的不说见下面源码,为了方便使用我分别用了两个Servlet,一个是统一下单UnifiedorderServlet,一个是支付回调PayCallBackServlet,你们可以自己封装。
一是统一下单UnifiedorderServlet:
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintWriter;import java.io.UnsupportedEncodingException;import java.net.HttpURLConnection;import java.net.URL;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.util.Random;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.http.ParseException;import org.apache.http.client.ClientProtocolException;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONML;import org.json.JSONObject;public class UnifiedorderServlet extends HttpServlet { private static final long serialVersionUID = 1L; private static final String appid = "";// 找微信 private static final String mch_id = "";// 找微信 public static final String api_key = "";// 找微信 private static final String trade_type = "JSAPI";// 写死 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html; charset=utf-8"); PrintWriter out = response.getWriter(); JSONObject jso = new JSONObject(); double money = 0.01; String openId = "", out_trade_no = "", body = "测试", ip = ""; try { out.print(execute(out_trade_no, body, openId, money, ip, jso).toString()); } catch (JSONException e) { e.printStackTrace(); } out.flush(); out.close(); } public JSONObject execute(String out_trade_no, String body, String openId, double money, String ip, JSONObject jso) throws JSONException { StringBuilder xml = new StringBuilder(); String notify_url = "https://test.com/payCallBack";// 支付回调地址 String prepay_id = "", sign = "", charset = "UTF-8", nonce_str = ""; try { String weixinMoney = new java.text.DecimalFormat("#").format(money * 100);// 微信是以分为单位的所以要乘以100 nonce_str = getRandomString(32); xml.append("appid=").append(appid).append("&body=").append(new String(body.getBytes(charset), charset));// 处理中文 xml.append("&mch_id=").append(mch_id).append("&nonce_str=").append(nonce_str); xml.append("¬ify_url=").append(notify_url).append("&openid=").append(openId); xml.append("&out_trade_no=").append(out_trade_no).append("&spbill_create_ip=").append(ip); xml.append("&total_fee=").append(weixinMoney).append("&trade_type=").append(trade_type).append("&key=").append(api_key); sign = MD5Purity(xml.toString()); // System.out.println(xml); xml.delete(0, xml.length()); xml.append("<xml>"); xml.append(" ").append(appid).append("</appid>"); xml.append("").append(body).append(""); xml.append(" <mch_id>").append(mch_id).append("</mch_id>"); xml.append(" <nonce_str>").append(nonce_str).append("</nonce_str>"); xml.append(" <openid>").append(openId).append("</openid>"); xml.append(" <notify_url>").append(notify_url).append("</notify_url>"); xml.append(" <out_trade_no>").append(out_trade_no).append("</out_trade_no>"); xml.append(" <spbill_create_ip>").append(ip).append("</spbill_create_ip>"); xml.append(" <total_fee>").append(weixinMoney).append("</total_fee>"); xml.append(" <trade_type>").append(trade_type).append("</trade_type>"); xml.append(" <sign>").append(sign).append("</sign>"); xml.append("</xml>"); HttpURLConnection conn = (HttpURLConnection) new URL("https://api.mch.weixin.qq.com/pay/unifiedorder").openConnection(); conn.setDoOutput(true); conn.setRequestMethod("POST"); conn.setRequestProperty("Content-Type", "text/xml"); conn.setRequestProperty("Charset", charset); OutputStream os = conn.getOutputStream(); os.write(xml.toString().getBytes(charset)); xml.delete(0, xml.length()); os.close(); int responseCode = conn.getResponseCode(); InputStreamReader in = null; BufferedReader br = null; if (responseCode == 200) { in = new InputStreamReader(conn.getInputStream(), charset); br = new BufferedReader(in); String retData = null; while ((retData = br.readLine()) != null) xml.append(retData); JSONArray childNodes = JSONML.toJSONObject(xml.toString()).getJSONArray("childNodes"); int len = childNodes.length() - 1; for (int i = len; i > -1; i--) { JSONObject js = childNodes.getJSONObject(i); if (js.get("tagName").equals("prepay_id")) { prepay_id = js.getJSONArray("childNodes").getString(0); break; } } } if (in != null) in.close(); if (br != null) br.close(); conn.disconnect(); // ----------------------------------给h6返回的数据 String timeStamp = System.currentTimeMillis() + ""; timeStamp = timeStamp.substring(0, 10);// 微信只要精确到秒 nonce_str = getRandomString(32); jso.put("appId", appid); jso.put("nonceStr", nonce_str); jso.put("package", "prepay_id=" + prepay_id); jso.put("signType", "MD5"); jso.put("timeStamp", timeStamp); xml.delete(0, xml.length()); xml.append("appId=").append(appid); xml.append("&nonceStr=").append(nonce_str); xml.append("&package=").append(jso.getString("package")); xml.append("&signType=").append(jso.getString("signType")); xml.append("&timeStamp=").append(timeStamp); xml.append("&key=").append(api_key); sign = MD5Purity(new String(xml.toString().getBytes(charset), charset)); jso.put("paySign", sign); //返回的数据主要用在这地方 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6 // ----------------------------------给h6返回的数据 } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ParseException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return jso; } public String MD5Purity(String plainText) { try { MessageDigest md = MessageDigest.getInstance("MD5"); md.update(plainText.getBytes("utf-8")); byte b[] = md.digest(); int i; StringBuffer buf = new StringBuffer(""); for (int offset = 0; offset < b.length; offset++) { i = b[offset]; if (i < 0) i += 256; if (i < 16) buf.append("0"); buf.append(Integer.toHexString(i)); } plainText = buf.toString(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return plainText.toUpperCase(); } private String getRandomString(int length) { String base = "abcdefghijklmnopqrstuvwxyz0123456789"; Random random = new Random(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < length; i++) { int number = random.nextInt(base.length()); sb.append(base.charAt(number)); } return sb.toString(); }}
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
Java微信支付之服务号支付代码示例
下载Word文档到电脑,方便收藏和打印~
下载Word文档
猜你喜欢
Java微信支付之服务号支付代码示例
Java微信支付之服务号支付实现,网上的java微信支付sdk和Demo基本上是水的,看着头疼所以我决心自己开始写Java微信支付之公众号支付,多的不说见下面源码,为了方便使用我分别用了两个Servlet,一个是统一下单Unifiedord
2023-05-30
android仿微信支付宝的支付密码输入框示例
大家好,我是狸小华,萌汉子一枚。今天给大家带来的是仿微信/支付宝的密码输入框。这个效果也出来有一段时间了,所以搜索一下还是有不少的网友实现,但是,但是!经过一番查看后,我发现他们的实现分为两大类。
一,直接继承EditText,然后在ond
2022-06-06
2024-04-02
Java实现支付对接常用加密方式的示例代码
这篇文章主要为大家详细介绍了Java如何实现支付对接时常用加密方式,文中的示例代码讲解详细,对我们学习Java有一点帮助,需要的可以参考一下
2023-02-09