当前位置: 移动技术网 > IT编程>开发语言>Java > java微信公众号企业付款开发

java微信公众号企业付款开发

2019年07月19日  | 移动技术网IT编程  | 我要评论

本文为大家分享了java微信公众号企业付款的开发代码,供大家参考,具体内容如下

详情参照微信开发者文档 企业付款文档

 

java代码 定义所传递的参数

 @requestmapping(value = "zhifu", method = requestmethod.get)
 public @responsebody string getweixinopenid(string code,
   httpservletrequest request)
 {
  // 订单号 自定义 生成32位uuid
  string partner_trade_no = uuidgenerator.getuuid();
  // 随机数
  string nonce_str = uuidgenerator.getuuid();
  // 转账金额(分为单位)1-200
  int jine = 100;
  // 企业付款信息
  string desc = "转账";
  // ip地址
  string spbill_create_ip = "xx.xx.xx";
  // re_user_name
  string re_user_name = "xx";

  string check_name = checkname.no_check.tostring();
  string zfpath = "d:/apiclient_cert.p12";
  try
  {
   // 获取openid
   string openid = wechatutil.getbyopenid(appid, secret, code);
   // 付款
   boolean flag = wechatutil.enterprisepayment(openid, appid, mchid,
     nonce_str, partner_trade_no, re_user_name, jine, desc,
     spbill_create_ip, check_name, key, zfpath);
   // 成功
   if (flag)
   {
    return "success";
   }

  }
  catch (exception e)
  {
   system.err.println(e.getstacktrace());
  }
  return "fail";
 }

获取关注本公众号用户唯一标示  获取openid

java代码 获取openid 静态方法

/**
  * 获取openid
  * 
  * @description
  * @param appid
  * @param secret
  * @param code
  * @return
  * @author shaomiao
  */
 public static string getbyopenid(string appid, string secret, string code)
 {
  string url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="
    + appid + "&secret=" + secret + "&code=" + code
    + "&grant_type=authorization_code";
  string jsonstring = wechatutil.getjsonstring(url);
  jsonobject json1 = jsonobject.parseobject(jsonstring);
  string openid = json1.get("openid").tostring();
  return openid;

 }

企业付款的调用公共方法

java代码
post提交 xml参数
解析回调的xml

 /**
  * 企业付款
  * 
  * @description
  * @param openid
  * @param appid
  * @param mchid 商户id
  * @param nonce_str
  * @param partner_trade_no
  * @param re_user_name
  * @param jine
  * @param desc
  * @param spbill_create_ip
  * @param check_name
  * @return
  * @author jobs
  * @throws ioexception
  * @throws clientprotocolexception
  */
 public static boolean enterprisepayment(string openid, string appid,
   string mchid, string nonce_str, string partner_trade_no,
   string re_user_name, int jine, string desc, string spbill_create_ip,
   string check_name, string key, string zfpath) throws exception
 {
  boolean getsuccess = true;
  if (null != openid)
  {
   // zf
   map<string, string> params_map = new linkedhashmap<string, string>();
   stringbuffer param = new stringbuffer();
   // appid
   param.append("mch_appid=" + appid);
   // 商户id
   param.append("&mchid=" + mchid);
   // 随机字符串
   // param.append("&nonce_str="
   // + zifwutil.string2md5(new date().gettime() + ""));
   param.append("&nonce_str=" + nonce_str);
   // 订单号自定义
   param.append("&partner_trade_no=" + partner_trade_no);

   param.append("&openid=" + openid);
   // 校验用户姓名选项
   /**
    * no_check:不校验真实姓名
    * force_check:强校验真实姓名(未实名认证的用户会校验失败,无法转账)
    * option_check:针对已实名认证的用户才校验真实姓名(未实名认证用户不校验,可以转账成功)
    */
   param.append("&check_name=" + check_name);
   // 收款用户姓名
   param.append("&re_user_name=" + re_user_name);
   // 金额
   param.append("&amount=" + jine);
   // 企业付款描述信息
   param.append("&desc=" + desc);
   // ip地址
   param.append("&spbill_create_ip=" + spbill_create_ip);

   string[] params = param.tostring().split("&");
   arrays.sort(params);
   param = new stringbuffer();
   for (string p : params)
   {
    string[] value = p.split("=");
    params_map.put(value[0], value[1]);
    param.append(value[0] + "=" + value[1] + "&");
   }

   // 签名最后
   string sign = zifwutil.string2md5(param.tostring() + "key=" + key)
     .touppercase();
   params_map.put("sign", sign);
   string reqstr = zifwutil.toxml(params_map);
   // zhengshu
   closeablehttpclient httpclient = certificatevalidation(zfpath,
     mchid);

   httppost httppost = new httppost(
     "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers");
   stringentity myentity = new stringentity(reqstr, "utf-8");
   httppost.setentity(myentity);
   system.out.println("executing request" + httppost.getrequestline());

   closeablehttpresponse response = httpclient.execute(httppost);
   system.out.println(response.getstatusline());

   httpentity resentity = response.getentity();
   inputstreamreader reader = new inputstreamreader(
     resentity.getcontent(), "utf-8");
   char[] buff = new char[1024];
   int length = 0;
   stringbuffer strhuxml = new stringbuffer();
   while ((length = reader.read(buff)) != -1)
   {
    strhuxml.append(new string(buff, 0, length));
    system.out.println(new string(buff, 0, length));
   }
   // httpclient.close();
   httpclient.getconnectionmanager().shutdown();

   // string ret = zifwutil.post(
   // "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers",
   // reqstr);

   // 解析传过来的xml
   document document = documenthelper.parsetext(strhuxml.tostring());
   // 得到xml根元素
   element root = document.getrootelement();
   // 得到根元素的所有子节点
   list<element> elementlist = root.elements();
   string errors = "";
   for (element e : elementlist)
   {

    // result_code业务
    if ("return_code".equals(e.getname())
      && !"success".equals(e.gettext()))
    {
     getsuccess = false;
    }
    if ("result_code".equals(e.getname())
      && !"success".equals(e.gettext()))
    {
     getsuccess = false;
    }
   }

  }
  return getsuccess;
 }

微信签名验证证书

验证证书公共方法

 /**
  * 验证证书公共方法
  * 
  * @description
  * @param zfpath 证书的路径
  * @param mchid 商户id
  * @return
  * @throws exception
  * @author jobs
  */
 // shanghuid
 // 验证证书
 @suppresswarnings("deprecation")
 public static closeablehttpclient certificatevalidation(string zfpath,
   string mchid) throws exception
 {
  // 指定读取证书格式为pkcs12
  keystore keystore = keystore.getinstance("pkcs12");
  // 证书地址
  fileinputstream instream = new fileinputstream(new file(zfpath));
  try
  {
   keystore.load(instream, mchid.tochararray());
  }
  finally
  {
   instream.close();
  }

  // trust own ca and all self-signed certs
  sslcontext sslcontext = sslcontexts.custom()
    .loadkeymaterial(keystore, mchid.tochararray()).build();
  // allow tlsv1 protocol only
  sslconnectionsocketfactory sslsf = new sslconnectionsocketfactory(
    sslcontext, new string[] { "tlsv1" }, null,
    sslconnectionsocketfactory.browser_compatible_hostname_verifier);
  closeablehttpclient httpclient = httpclients.custom()
    .setsslsocketfactory(sslsf).build();
  return httpclient;
 }

微信公共方法  字符串转xml

/**
  * 微信支付拼接xml
  * 
  * @param params
  * @return
  */
 public static string toxml(map<string, string> params)
 {
  string xml = "<xml>";
  for (string key : params.keyset())
  {
   if ("body".equals(key) || "attach".equals(key)
     || "sign".equals(key))
   {
    xml += "<" + key + "><![cdata[" + params.get(key) + "]]></"
      + key + ">";
   }
   else
   {
    xml += "<" + key + ">" + params.get(key) + "</" + key + ">";
   }
  }
  xml += "</xml>";
  return xml;
 }

微信公共方法  字符串md5

加密
用来加密签名

/***
  * md5加码 生成32位md5码
  */
 public static string string2md5(string instr)
 {
  stringbuffer buf = new stringbuffer();
  try
  {
   messagedigest md = messagedigest.getinstance("md5");
   md.update(instr.getbytes("utf-8"));
   byte b[] = md.digest();

   int i;

   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));
   }
  }
  catch (exception e)
  {
   e.printstacktrace();
  }
  return buf.tostring();
 }

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网