UDN-企业互联网技术人气社区

板块导航

浏览  : 1730
回复  : 2

[原生js] java实现微信支付(服务端)

[复制链接]
西北的风的头像 楼主
发表于 2017-1-17 16:52:00 | 显示全部楼层 |阅读模式
  这篇文章主要介绍了java实现微信支付,针对服务端进行代码编写,感兴趣的小伙伴们可以参考一下

  废话不多说,直接看代码。
  1. RequestHandler requestHandler = new RequestHandler(super.getRequest(),super.getResponse());

  2. //获取token //两小时内有效,两小时后重新获取

  3. Token = requestHandler.GetToken();

  4. //更新token 到应用中

  5. requestHandler.getTokenReal();

  6. System.out.println("微信支付获取token=======================:" +Token);

  7. //requestHandler 初始化

  8. requestHandler.init();

  9. requestHandler.init(appid,appsecret, appkey,partnerkey, key);
复制代码

  代码:本地系统生成订单
  1. // 设置package订单参数

  2.   SortedMap<String, String> packageParams = new TreeMap<String, String>();

  3.   packageParams.put("bank_type", "WX"); // 支付类型

  4.   packageParams.put("body", "xxxx"); // 商品描述

  5.   packageParams.put("fee_type", "1"); // 银行币种

  6.   packageParams.put("input_charset", "UTF-8"); // 字符集

  7.   packageParams.put("notify_url", "http://xxxx.com/xxxx/wxcallback"); // 通知地址 这里的通知地址使用外网地址测试,注意80端口是否打开。

  8.   packageParams.put("out_trade_no", no); // 商户订单号

  9.   packageParams.put("partner", partenerid); // 设置商户号

  10.   packageParams.put("spbill_create_ip", super.getRequest().getRemoteHost()); // 订单生成的机器IP,指用户浏览器端IP

  11.   packageParams.put("total_fee", String.valueOf(rstotal)); // 商品总金额,以分为单位



  12. // 设置支付参数

  13.   SortedMap<String, String> signParams = new TreeMap<String, String>();

  14.   signParams.put("appid", appid);

  15.   signParams.put("noncestr", noncestr);

  16.   signParams.put("traceid", PropertiesUtils.getOrderNO());

  17.   signParams.put("timestamp", timestamp);

  18.   signParams.put("package", packageValue);

  19.   signParams.put("appkey", this.appkey);



  20.   // 生成支付签名,要采用URLENCODER的原始值进行SHA1算法!

  21.   String sign ="";

  22.     try {

  23.     sign = Sha1Util.createSHA1Sign(signParams);

  24.     } catch (Exception e) {

  25.     e.printStackTrace();

  26.     }   

  27.   // 增加非参与签名的额外参数

  28.   signParams.put("sign_method", "sha1");

  29.   signParams.put("app_signature", sign);   

  30.   // API支付拼包结束------------------------------------

  31.   //获取prepayid

  32.   String prepayid = requestHandler.sendPrepay(signParams);

  33.   System.out.println("prepayid :" + prepayid);
复制代码

  代码:生成预付快订单完成
  1. //生成预付快订单完成,返回给android,ios 掉起微信所需要的参数。

  2.   SortedMap<String, String> payParams = new TreeMap<String, String>();

  3.   payParams.put("appid", appid);

  4.   payParams.put("noncestr", noncestr);

  5.   payParams.put("package", "Sign=WXPay");

  6.   payParams.put("partnerid", partenerid);

  7.   payParams.put("prepayid", prepayid);

  8.   payParams.put("appkey", this.appkey);

  9.   //这里除1000 是因为参数长度限制。

  10.   int time = (int) (System.currentTimeMillis() / 1000);

  11.   payParams.put("timestamp",String.valueOf(time));

  12.   

  13.   System.out.println("timestamp:" + time);

  14.   

  15.   //签名

  16.   String paysign ="";

  17.   try {

  18.         paysign = Sha1Util.createSHA1Sign(payParams);

  19.   } catch (Exception e) {

  20.     e.printStackTrace();

  21.   }

  22.   payParams.put("sign", paysign);

  23.   

  24. //拼json 数据返回给客户端

  25.   BasicDBObject backObject = new BasicDBObject();

  26.   backObject.put("appid", appid);

  27.   backObject.put("noncestr", payParams.get("noncestr"));

  28.   backObject.put("package", "Sign=WXPay");

  29.   backObject.put("partnerid", payParams.get("partnerid"));

  30.   backObject.put("prepayid", payParams.get("prepayid"));

  31.   backObject.put("appkey", this.appkey);

  32.   backObject.put("timestamp",payParams.get("timestamp"));

  33.   backObject.put("sign",payParams.get("sign"));
  34.    
  35.   String backstr = dataObject.toString();

  36.   System.out.println("backstr:" + backstr);

  37.   return backstr;
复制代码

  到此为止,预付款订单已生成,并且已返回客户端,坐等微信服务器通知,通知的地址就是生成预付款订单的notify_url
  1. ResponseHandler resHandler = new ResponseHandler(request, response);

  2.   resHandler.setKey(partnerkey);

  3.   //创建请求对象

  4.   //RequestHandler queryReq = new RequestHandler(request, response);

  5.   //queryReq.init();

  6.   if (resHandler.isTenpaySign() == true) {

  7.       //商户订单号

  8.       String out_trade_no = resHandler.getParameter("out_trade_no");

  9.       System.out.println("out_trade_no:" + out_trade_no);

  10.       //财付通订单号

  11.       String transaction_id = resHandler.getParameter("transaction_id");

  12.       System.out.println("transaction_id:" + transaction_id);

  13.       //金额,以分为单位

  14.       String total_fee = resHandler.getParameter("total_fee");

  15.       //如果有使用折扣券,discount有值,total_fee+discount=原请求的total_fee

  16.       String discount = resHandler.getParameter("discount");

  17.       //支付结果

  18.       String trade_state = resHandler.getParameter("trade_state");

  19.   

  20.       //判断签名及结果

  21.       if ("0".equals(trade_state)) {

  22.         //------------------------------

  23.         //即时到账处理业务开始

  24.         //------------------------------

  25.       

  26.         System.out.println("----------------业务逻辑执行-----------------");

  27.       

  28.         //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——

  29.         System.out.println("----------------业务逻辑执行完毕-----------------");

  30.         System.out.println("success"); // 请不要修改或删除

  31.       

  32.         System.out.println("即时到账支付成功");

  33.         //给财付通系统发送成功信息,财付通系统收到此结果后不再进行后续通知

  34.         resHandler.sendToCFT("success");

  35.    

  36.        //给微信服务器返回success 否则30分钟通知8次

  37.        return "success";

  38.      }else{      

  39.       System.out.println("通知签名验证失败");

  40.       resHandler.sendToCFT("fail");

  41.       response.setCharacterEncoding("utf-8");

  42.     }

  43.    }else {

  44.       System.out.println("fail -Md5 failed");

  45.   }
复制代码

  以上就是java实现微信支付服务端所要提供的代码,希望大家仔细研究,实现微信支付。

相关帖子

发表于 2017-1-17 16:52:30 | 显示全部楼层
有空一起交流一下
使用道具 举报

回复

发表于 2017-1-17 16:52:31 | 显示全部楼层
其实js如果遇到web安全类的项目,那就又要做牺牲了,无法读写文件,访问受限。。。哎。。。
使用道具 举报

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部