我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java微信支付之服务号支付代码示例

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java微信支付之服务号支付代码示例

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

没想到吧!Java也可以实现微信和支付宝支付功能(附代码)

申请好微信商户号appid,拿到商户id和商户秘钥,退款的话需要商户证书;2、申请好支付宝商户号appid,商户公钥和秘钥(需要用支付宝工具自己生成),支付宝退款不需要证书。

Java实现支付对接常用加密方式的示例代码

这篇文章主要为大家详细介绍了Java如何实现支付对接时常用加密方式,文中的示例代码讲解详细,对我们学习Java有一点帮助,需要的可以参考一下
2023-02-09

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录