前言  首先声明 我并非原创 原创是 http://blog.csdn.net/wangqiuyun/article/details/51241064 我只是在前辈的基础 加以解释说明 还有自己的一些思路

引用的第三方jar包 jdom-1.1.3.jar、jaxen-1.1.6.jar。(直接百度就可以找到了.)

大致流程

1.根据用户需求生成订单状态为未支付

2.用相应的参数请求微信接口 获取支付url

3.把获取的url 用工具生成二维码

4.支付回执  {1.验证签名 2.处理业务流程(例如:更改订单状态为已支付  生成相应的流水记录信息) 3.向微信发送消息 表示收到消息}

5.扫码页面最后处理 (用定时函数不停的获取该订单编号的状态 如果是已付款 弹出支付成功 跳转到相应的页面)

大致流程就是如此 下面不废话贴代码

  1. public String weixin_pay(Integer orderId) throws Exception {
  2. TPredepositOrder predepositOrder=predepositOrderService.getPredepositOrderInfoById(orderId);//根据订单号获取订单信息
  3. // 账号信息
  4. String appid = Constants.appid; // appid 开发者id 登录公众号》开发》基本配置 AppID(应用ID)后面就是
  5. String mch_id =Constants.WEIXIN_MCH_ID; // 商业号 不知道的问你老板要
  6. String key = Constants.WEIXIN_PAY_KEY; // key 登录微信商户号后,找到账户设置 -> 密码安全 -> API安全 -> API密钥;不会的这个有个地址点开看 http://www.2cto.com/weixin/201506/412421.html

  7. //根据时间生成随机字符串
  8. String currTime = PayCommonUtil.getCurrTime();
  9. String strTime = currTime.substring(8, currTime.length());
  10. String strRandom = PayCommonUtil.buildRandom(4) + "";
  11. String nonce_str = strTime + strRandom;
  12.  
  13. //价格处理
  14. Double price=predepositOrder.getPreDeposit();
  15. int total_fee=(int) (price*100);
  16. String order_price =total_fee+""; // 价格 注意:价格的单位是分
  17.  
  18. String body = "天天酷跑-游戏充值"; // 商品名称 格式必须是 公司名称-商品名称
  19. String out_trade_no = orderId.toString(); // 订单号
  20.  
  21. // 获取发起电脑 ip
  22. String ip=InetAddress.getLocalHost().toString();
  23. ip=ip.substring(ip.lastIndexOf('/')+1,ip.length());
  24. System.out.println("本机的IP = " +ip);
  25. String spbill_create_ip =ip;
  26. // 回调接口回调地址
  27. String notify_url = Constants.NOTIFY_URL;
  28. String trade_type = "NATIVE"; //支付类型 网页扫码支付就用这个 不解释
  29.  
  30. SortedMap<Object,Object> packageParams = new TreeMap<Object,Object>();
  31. packageParams.put("appid", appid);
  32. packageParams.put("body", body);
  33. packageParams.put("mch_id", mch_id);
  34. packageParams.put("nonce_str",nonce_str);
  35. packageParams.put("notify_url", notify_url);
  36. packageParams.put("out_trade_no",out_trade_no);
  37. packageParams.put("spbill_create_ip", spbill_create_ip);
  38. packageParams.put("total_fee", order_price);
  39. packageParams.put("trade_type", trade_type);
  40. String sign = PayCommonUtil.createSign("UTF-8",packageParams,key);
  41. packageParams.put("sign",sign);
  42. String requestXML = PayCommonUtil.getRequestXml(packageParams);
  43. System.out.println(requestXML);
  44. String resXml = HttpUtil.postData("https://api.mch.weixin.qq.com/pay/unifiedorder",requestXML);//这个是微信返回url的接口地址
  45. System.out.println("返回的xml信息"+resXml);
  46. Map map = XMLUtil.doXMLParse(resXml);
  47. String urlCode = (String) map.get("code_url");
  48. System.out.println("支付地址"+urlCode);
  49. return urlCode;
  50. }

回调地址 设置:登录微信支付后台》微信支付》开发配置  支付回调接口地址 回调地址ip必须是域名也就是固定ip不然微信访问不到无法进入回调

这个方法是返回一个支付url下面是生成一个二维码

  1. <div style="margin-top: 10px;width:500px;height:500px;" id="output"></div>
  2. <script type="text/javascript" src="weixin/js/jquery.qrcode-0.12.0.min.js"></script><--!引入生成二维码的js--->
  3. <script type="text/javascript">
  4. var url = '${urlCode}';
  5. jQuery('#output').qrcode({render: "table",width:500,height:500,correctLevel:0,text:url});
  6.  
  7. window.setInterval("selectInfo()",10000);
  8. function selectInfo(){
  9. //用定时函数不停的获取该订单编号的状态 如果是已付款 弹出支付成功 跳转到相应的页面
  10. }
  11. </script>

生成二维码的 js

1
2
/* jQuery.qrcode 0.12.0 - http://larsjung.de/jquery-qrcode/ - uses //github.com/kazuhikoarase/qrcode-generator (MIT) */
!function(r){"use strict";function t(t,e,n,o){function i(r,t){return r-=o,t-=o,0>r||r>=u||0>t||t>=u?!1:a.isDark(r,t)}var a=r(n,e);a.addData(t),a.make(),o=o||0;var u=a.getModuleCount(),f=a.getModuleCount()+2*o,c=function(r,t,e,n){var o=this.isDark,i=1/f;this.isDark=function(a,u){var f=u*i,c=a*i,l=f+i,g=c+i;return o(a,u)&&(r>l||f>e||t>g||c>n)}};this.text=t,this.level=e,this.version=n,this.moduleCount=f,this.isDark=i,this.addBlank=c}function e(r,e,n,o,i){n=Math.max(1,n||1),o=Math.min(40,o||40);for(var a=n;o>=a;a+=1)try{return new t(r,e,a,i)}catch(u){}}function n(r,t,e){var n=e.size,o="bold "+e.mSize*n+"px "+e.fontname,i=w("<canvas/>")[0].getContext("2d");i.font=o;var a=i.measureText(e.label).width,u=e.mSize,f=a/n,c=(1-f)*e.mPosX,l=(1-u)*e.mPosY,g=c+f,s=l+u,h=.01;1===e.mode?r.addBlank(0,l-h,n,s+h):r.addBlank(c-h,l-h,g+h,s+h),t.fillStyle=e.fontcolor,t.font=o,t.fillText(e.label,c*n,l*n+.75*e.mSize*n)}function o(r,t,e){var n=e.size,o=e.image.naturalWidth||1,i=e.image.naturalHeight||1,a=e.mSize,u=a*o/i,f=(1-u)*e.mPosX,c=(1-a)*e.mPosY,l=f+u,g=c+a,s=.01;3===e.mode?r.addBlank(0,c-s,n,g+s):r.addBlank(f-s,c-s,l+s,g+s),t.drawImage(e.image,f*n,c*n,u*n,a*n)}function i(r,t,e){w(e.background).is("img")?t.drawImage(e.background,0,0,e.size,e.size):e.background&&(t.fillStyle=e.background,t.fillRect(e.left,e.top,e.size,e.size));var i=e.mode;1===i||2===i?n(r,t,e):(3===i||4===i)&&o(r,t,e)}function a(r,t,e,n,o,i,a,u){r.isDark(a,u)&&t.rect(n,o,i,i)}function u(r,t,e,n,o,i,a,u,f,c){a?r.moveTo(t+i,e):r.moveTo(t,e),u?(r.lineTo(n-i,e),r.arcTo(n,e,n,o,i)):r.lineTo(n,e),f?(r.lineTo(n,o-i),r.arcTo(n,o,t,o,i)):r.lineTo(n,o),c?(r.lineTo(t+i,o),r.arcTo(t,o,t,e,i)):r.lineTo(t,o),a?(r.lineTo(t,e+i),r.arcTo(t,e,n,e,i)):r.lineTo(t,e)}function f(r,t,e,n,o,i,a,u,f,c){a&&(r.moveTo(t+i,e),r.lineTo(t,e),r.lineTo(t,e+i),r.arcTo(t,e,t+i,e,i)),u&&(r.moveTo(n-i,e),r.lineTo(n,e),r.lineTo(n,e+i),r.arcTo(n,e,n-i,e,i)),f&&(r.moveTo(n-i,o),r.lineTo(n,o),r.lineTo(n,o-i),r.arcTo(n,o,n-i,o,i)),c&&(r.moveTo(t+i,o),r.lineTo(t,o),r.lineTo(t,o-i),r.arcTo(t,o,t+i,o,i))}function c(r,t,e,n,o,i,a,c){var l=r.isDark,g=n+i,s=o+i,h=e.radius*i,v=a-1,d=a+1,w=c-1,m=c+1,p=l(a,c),y=l(v,w),T=l(v,c),B=l(v,m),A=l(a,m),E=l(d,m),k=l(d,c),M=l(d,w),C=l(a,w);p?u(t,n,o,g,s,h,!T&&!C,!T&&!A,!k&&!A,!k&&!C):f(t,n,o,g,s,h,T&&C&&y,T&&A&&B,k&&A&&E,k&&C&&M)}function l(r,t,e){var n,o,i=r.moduleCount,u=e.size/i,f=a;for(p&&e.radius>0&&e.radius<=.5&&(f=c),t.beginPath(),n=0;i>n;n+=1)for(o=0;i>o;o+=1){var l=e.left+o*u,g=e.top+n*u,s=u;f(r,t,e,l,g,s,n,o)}if(w(e.fill).is("img")){t.strokeStyle="rgba(0,0,0,0.5)",t.lineWidth=2,t.stroke();var h=t.globalCompositeOperation;t.globalCompositeOperation="destination-out",t.fill(),t.globalCompositeOperation=h,t.clip(),t.drawImage(e.fill,0,0,e.size,e.size),t.restore()}else t.fillStyle=e.fill,t.fill()}function g(r,t){var n=e(t.text,t.ecLevel,t.minVersion,t.maxVersion,t.quiet);if(!n)return null;var o=w(r).data("qrcode",n),a=o[0].getContext("2d");return i(n,a,t),l(n,a,t),o}function s(r){var t=w("<canvas/>").attr("width",r.size).attr("height",r.size);return g(t,r)}function h(r){return w("<img/>").attr("src",s(r)[0].toDataURL("image/png"))}function v(r){var t=e(r.text,r.ecLevel,r.minVersion,r.maxVersion,r.quiet);if(!t)return null;var n,o,i=r.size,a=r.background,u=Math.floor,f=t.moduleCount,c=u(i/f),l=u(.5*(i-c*f)),g={position:"relative",left:0,top:0,padding:0,margin:0,width:i,height:i},s={position:"absolute",padding:0,margin:0,width:c,height:c,"background-color":r.fill},h=w("<div/>").data("qrcode",t).css(g);for(a&&h.css("background-color",a),n=0;f>n;n+=1)for(o=0;f>o;o+=1)t.isDark(n,o)&&w("<div/>").css(s).css({left:l+o*c,top:l+n*c}).appendTo(h);return h}function d(r){return m&&"canvas"===r.render?s(r):m&&"image"===r.render?h(r):v(r)}var w=jQuery,m=function(){var r=document.createElement("canvas");return Boolean(r.getContext&&r.getContext("2d"))}(),p="[object Opera]"!==Object.prototype.toString.call(window.opera),y={render:"canvas",minVersion:1,maxVersion:40,ecLevel:"L",left:0,top:0,size:200,fill:"#000",background:null,text:"no text",radius:0,quiet:0,mode:0,mSize:.1,mPosX:.5,mPosY:.5,label:"no label",fontname:"sans",fontcolor:"#000",image:null};w.fn.qrcode=function(r){var t=w.extend({},y,r);return this.each(function(){"canvas"===this.nodeName.toLowerCase()?g(this,t):w(this).append(d(t))})}}(function(){var r=function(){function r(t,e){if("undefined"==typeof t.length)throw new Error(t.length+"/"+e);var n=function(){for(var r=0;r<t.length&&0==t[r];)r+=1;for(var n=new Array(t.length-r+e),o=0;o<t.length-r;o+=1)n[o]=t[o+r];return n}(),o={};return o.getAt=function(r){return n[r]},o.getLength=function(){return n.length},o.multiply=function(t){for(var e=new Array(o.getLength()+t.getLength()-1),n=0;n<o.getLength();n+=1)for(var i=0;i<t.getLength();i+=1)e[n+i]^=a.gexp(a.glog(o.getAt(n))+a.glog(t.getAt(i)));return r(e,0)},o.mod=function(t){if(o.getLength()-t.getLength()<0)return o;for(var e=a.glog(o.getAt(0))-a.glog(t.getAt(0)),n=new Array(o.getLength()),i=0;i<o.getLength();i+=1)n[i]=o.getAt(i);for(var i=0;i<t.getLength();i+=1)n[i]^=a.gexp(a.glog(t.getAt(i))+e);return r(n,0).mod(t)},o}var t=function(t,e){var o=236,a=17,l=t,g=n[e],s=null,h=0,d=null,w=new Array,m={},p=function(r,t){h=4*l+17,s=function(r){for(var t=new Array(r),e=0;r>e;e+=1){t[e]=new Array(r);for(var n=0;r>n;n+=1)t[e][n]=null}return t}(h),y(0,0),y(h-7,0),y(0,h-7),A(),B(),k(r,t),l>=7&&E(r),null==d&&(d=D(l,g,w)),M(d,t)},y=function(r,t){for(var e=-1;7>=e;e+=1)if(!(-1>=r+e||r+e>=h))for(var n=-1;7>=n;n+=1)-1>=t+n||t+n>=h||(e>=0&&6>=e&&(0==n||6==n)||n>=0&&6>=n&&(0==e||6==e)||e>=2&&4>=e&&n>=2&&4>=n?s[r+e][t+n]=!0:s[r+e][t+n]=!1)},T=function(){for(var r=0,t=0,e=0;8>e;e+=1){p(!0,e);var n=i.getLostPoint(m);(0==e||r>n)&&(r=n,t=e)}return t},B=function(){for(var r=8;h-8>r;r+=1)null==s[r][6]&&(s[r][6]=r%2==0);for(var t=8;h-8>t;t+=1)null==s[6][t]&&(s[6][t]=t%2==0)},A=function(){for(var r=i.getPatternPosition(l),t=0;t<r.length;t+=1)for(var e=0;e<r.length;e+=1){var n=r[t],o=r[e];if(null==s[n][o])for(var a=-2;2>=a;a+=1)for(var u=-2;2>=u;u+=1)-2==a||2==a||-2==u||2==u||0==a&&0==u?s[n+a][o+u]=!0:s[n+a][o+u]=!1}},E=function(r){for(var t=i.getBCHTypeNumber(l),e=0;18>e;e+=1){var n=!r&&1==(t>>e&1);s[Math.floor(e/3)][e%3+h-8-3]=n}for(var e=0;18>e;e+=1){var n=!r&&1==(t>>e&1);s[e%3+h-8-3][Math.floor(e/3)]=n}},k=function(r,t){for(var e=g<<3|t,n=i.getBCHTypeInfo(e),o=0;15>o;o+=1){var a=!r&&1==(n>>o&1);6>o?s[o][8]=a:8>o?s[o+1][8]=a:s[h-15+o][8]=a}for(var o=0;15>o;o+=1){var a=!r&&1==(n>>o&1);8>o?s[8][h-o-1]=a:9>o?s[8][15-o-1+1]=a:s[8][15-o-1]=a}s[h-8][8]=!r},M=function(r,t){for(var e=-1,n=h-1,o=7,a=0,u=i.getMaskFunction(t),f=h-1;f>0;f-=2)for(6==f&&(f-=1);;){for(var c=0;2>c;c+=1)if(null==s[n][f-c]){var l=!1;a<r.length&&(l=1==(r[a]>>>o&1));var g=u(n,f-c);g&&(l=!l),s[n][f-c]=l,o-=1,-1==o&&(a+=1,o=7)}if(n+=e,0>n||n>=h){n-=e,e=-e;break}}},C=function(t,e){for(var n=0,o=0,a=0,u=new Array(e.length),f=new Array(e.length),c=0;c<e.length;c+=1){var l=e[c].dataCount,g=e[c].totalCount-l;o=Math.max(o,l),a=Math.max(a,g),u[c]=new Array(l);for(var s=0;s<u[c].length;s+=1)u[c][s]=255&t.getBuffer()[s+n];n+=l;var h=i.getErrorCorrectPolynomial(g),v=r(u[c],h.getLength()-1),d=v.mod(h);f[c]=new Array(h.getLength()-1);for(var s=0;s<f[c].length;s+=1){var w=s+d.getLength()-f[c].length;f[c][s]=w>=0?d.getAt(w):0}}for(var m=0,s=0;s<e.length;s+=1)m+=e[s].totalCount;for(var p=new Array(m),y=0,s=0;o>s;s+=1)for(var c=0;c<e.length;c+=1)s<u[c].length&&(p[y]=u[c][s],y+=1);for(var s=0;a>s;s+=1)for(var c=0;c<e.length;c+=1)s<f[c].length&&(p[y]=f[c][s],y+=1);return p},D=function(r,t,e){for(var n=u.getRSBlocks(r,t),c=f(),l=0;l<e.length;l+=1){var g=e[l];c.put(g.getMode(),4),c.put(g.getLength(),i.getLengthInBits(g.getMode(),r)),g.write(c)}for(var s=0,l=0;l<n.length;l+=1)s+=n[l].dataCount;if(c.getLengthInBits()>8*s)throw new Error("code length overflow. ("+c.getLengthInBits()+">"+8*s+")");for(c.getLengthInBits()+4<=8*s&&c.put(0,4);c.getLengthInBits()%8!=0;)c.putBit(!1);for(;;){if(c.getLengthInBits()>=8*s)break;if(c.put(o,8),c.getLengthInBits()>=8*s)break;c.put(a,8)}return C(c,n)};return m.addData=function(r){var t=c(r);w.push(t),d=null},m.isDark=function(r,t){if(0>r||r>=h||0>t||t>=h)throw new Error(r+","+t);return s[r][t]},m.getModuleCount=function(){return h},m.make=function(){p(!1,T())},m.createTableTag=function(r,t){r=r||2,t="undefined"==typeof t?4*r:t;var e="";e+='<table style="',e+=" border-width: 0px; border-style: none;",e+=" border-collapse: collapse;",e+=" padding: 0px; margin: "+t+"px;",e+='">',e+="<tbody>";for(var n=0;n<m.getModuleCount();n+=1){e+="<tr>";for(var o=0;o<m.getModuleCount();o+=1)e+='<td style="',e+=" border-width: 0px; border-style: none;",e+=" border-collapse: collapse;",e+=" padding: 0px; margin: 0px;",e+=" width: "+r+"px;",e+=" height: "+r+"px;",e+=" ",e+=m.isDark(n,o)?"#000000":"#ffffff",e+=";",e+='"/>';e+="</tr>"}return e+="</tbody>",e+="</table>"},m.createImgTag=function(r,t){r=r||2,t="undefined"==typeof t?4*r:t;var e=m.getModuleCount()*r+2*t,n=t,o=e-t;return v(e,e,function(t,e){if(t>=n&&o>t&&e>=n&&o>e){var i=Math.floor((t-n)/r),a=Math.floor((e-n)/r);return m.isDark(a,i)?0:1}return 1})},m};t.stringToBytes=function(r){for(var t=new Array,e=0;e<r.length;e+=1){var n=r.charCodeAt(e);t.push(255&n)}return t},t.createStringToBytes=function(r,t){var e=function(){for(var e=s(r),n=function(){var r=e.read();if(-1==r)throw new Error;return r},o=0,i={};;){var a=e.read();if(-1==a)break;var u=n(),f=n(),c=n(),l=String.fromCharCode(a<<8|u),g=f<<8|c;i[l]=g,o+=1}if(o!=t)throw new Error(o+" != "+t);return i}(),n="?".charCodeAt(0);return function(r){for(var t=new Array,o=0;o<r.length;o+=1){var i=r.charCodeAt(o);if(128>i)t.push(i);else{var a=e[r.charAt(o)];"number"==typeof a?(255&a)==a?t.push(a):(t.push(a>>>8),t.push(255&a)):t.push(n)}}return t}};var e={MODE_NUMBER:1,MODE_ALPHA_NUM:2,MODE_8BIT_BYTE:4,MODE_KANJI:8},n={L:1,M:0,Q:3,H:2},o={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7},i=function(){var t=[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],n=1335,i=7973,u=21522,f={},c=function(r){for(var t=0;0!=r;)t+=1,r>>>=1;return t};return f.getBCHTypeInfo=function(r){for(var t=r<<10;c(t)-c(n)>=0;)t^=n<<c(t)-c(n);return(r<<10|t)^u},f.getBCHTypeNumber=function(r){for(var t=r<<12;c(t)-c(i)>=0;)t^=i<<c(t)-c(i);return r<<12|t},f.getPatternPosition=function(r){return t[r-1]},f.getMaskFunction=function(r){switch(r){case o.PATTERN000:return function(r,t){return(r+t)%2==0};case o.PATTERN001:return function(r,t){return r%2==0};case o.PATTERN010:return function(r,t){return t%3==0};case o.PATTERN011:return function(r,t){return(r+t)%3==0};case o.PATTERN100:return function(r,t){return(Math.floor(r/2)+Math.floor(t/3))%2==0};case o.PATTERN101:return function(r,t){return r*t%2+r*t%3==0};case o.PATTERN110:return function(r,t){return(r*t%2+r*t%3)%2==0};case o.PATTERN111:return function(r,t){return(r*t%3+(r+t)%2)%2==0};default:throw new Error("bad maskPattern:"+r)}},f.getErrorCorrectPolynomial=function(t){for(var e=r([1],0),n=0;t>n;n+=1)e=e.multiply(r([1,a.gexp(n)],0));return e},f.getLengthInBits=function(r,t){if(t>=1&&10>t)switch(r){case e.MODE_NUMBER:return 10;case e.MODE_ALPHA_NUM:return 9;case e.MODE_8BIT_BYTE:return 8;case e.MODE_KANJI:return 8;default:throw new Error("mode:"+r)}else if(27>t)switch(r){case e.MODE_NUMBER:return 12;case e.MODE_ALPHA_NUM:return 11;case e.MODE_8BIT_BYTE:return 16;case e.MODE_KANJI:return 10;default:throw new Error("mode:"+r)}else{if(!(41>t))throw new Error("type:"+t);switch(r){case e.MODE_NUMBER:return 14;case e.MODE_ALPHA_NUM:return 13;case e.MODE_8BIT_BYTE:return 16;case e.MODE_KANJI:return 12;default:throw new Error("mode:"+r)}}},f.getLostPoint=function(r){for(var t=r.getModuleCount(),e=0,n=0;t>n;n+=1)for(var o=0;t>o;o+=1){for(var i=0,a=r.isDark(n,o),u=-1;1>=u;u+=1)if(!(0>n+u||n+u>=t))for(var f=-1;1>=f;f+=1)0>o+f||o+f>=t||(0!=u||0!=f)&&a==r.isDark(n+u,o+f)&&(i+=1);i>5&&(e+=3+i-5)}for(var n=0;t-1>n;n+=1)for(var o=0;t-1>o;o+=1){var c=0;r.isDark(n,o)&&(c+=1),r.isDark(n+1,o)&&(c+=1),r.isDark(n,o+1)&&(c+=1),r.isDark(n+1,o+1)&&(c+=1),(0==c||4==c)&&(e+=3)}for(var n=0;t>n;n+=1)for(var o=0;t-6>o;o+=1)r.isDark(n,o)&&!r.isDark(n,o+1)&&r.isDark(n,o+2)&&r.isDark(n,o+3)&&r.isDark(n,o+4)&&!r.isDark(n,o+5)&&r.isDark(n,o+6)&&(e+=40);for(var o=0;t>o;o+=1)for(var n=0;t-6>n;n+=1)r.isDark(n,o)&&!r.isDark(n+1,o)&&r.isDark(n+2,o)&&r.isDark(n+3,o)&&r.isDark(n+4,o)&&!r.isDark(n+5,o)&&r.isDark(n+6,o)&&(e+=40);for(var l=0,o=0;t>o;o+=1)for(var n=0;t>n;n+=1)r.isDark(n,o)&&(l+=1);var g=Math.abs(100*l/t/t-50)/5;return e+=10*g},f}(),a=function(){for(var r=new Array(256),t=new Array(256),e=0;8>e;e+=1)r[e]=1<<e;for(var e=8;256>e;e+=1)r[e]=r[e-4]^r[e-5]^r[e-6]^r[e-8];for(var e=0;255>e;e+=1)t[r[e]]=e;var n={};return n.glog=function(r){if(1>r)throw new Error("glog("+r+")");return t[r]},n.gexp=function(t){for(;0>t;)t+=255;for(;t>=256;)t-=255;return r[t]},n}(),u=function(){var r=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12,7,37,13],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]],t=function(r,t){var e={};return e.totalCount=r,e.dataCount=t,e},e={},o=function(t,e){switch(e){case n.L:return r[4*(t-1)+0];case n.M:return r[4*(t-1)+1];case n.Q:return r[4*(t-1)+2];case n.H:return r[4*(t-1)+3];default:return void 0}};return e.getRSBlocks=function(r,e){var n=o(r,e);if("undefined"==typeof n)throw new Error("bad rs block @ typeNumber:"+r+"/errorCorrectLevel:"+e);for(var i=n.length/3,a=new Array,u=0;i>u;u+=1)for(var f=n[3*u+0],c=n[3*u+1],l=n[3*u+2],g=0;f>g;g+=1)a.push(t(c,l));return a},e}(),f=function(){var r=new Array,t=0,e={};return e.getBuffer=function(){return r},e.getAt=function(t){var e=Math.floor(t/8);return 1==(r[e]>>>7-t%8&1)},e.put=function(r,t){for(var n=0;t>n;n+=1)e.putBit(1==(r>>>t-n-1&1))},e.getLengthInBits=function(){return t},e.putBit=function(e){var n=Math.floor(t/8);r.length<=n&&r.push(0),e&&(r[n]|=128>>>t%8),t+=1},e},c=function(r){var n=e.MODE_8BIT_BYTE,o=t.stringToBytes(r),i={};return i.getMode=function(){return n},i.getLength=function(r){return o.length},i.write=function(r){for(var t=0;t<o.length;t+=1)r.put(o[t],8)},i},l=function(){var r=new Array,t={};return t.writeByte=function(t){r.push(255&t)},t.writeShort=function(r){t.writeByte(r),t.writeByte(r>>>8)},t.writeBytes=function(r,e,n){e=e||0,n=n||r.length;for(var o=0;n>o;o+=1)t.writeByte(r[o+e])},t.writeString=function(r){for(var e=0;e<r.length;e+=1)t.writeByte(r.charCodeAt(e))},t.toByteArray=function(){return r},t.toString=function(){var t="";t+="[";for(var e=0;e<r.length;e+=1)e>0&&(t+=","),t+=r[e];return t+="]"},t},g=function(){var r=0,t=0,e=0,n="",o={},i=function(r){n+=String.fromCharCode(a(63&r))},a=function(r){if(0>r);else{if(26>r)return 65+r;if(52>r)return 97+(r-26);if(62>r)return 48+(r-52);if(62==r)return 43;if(63==r)return 47}throw new Error("n:"+r)};return o.writeByte=function(n){for(r=r<<8|255&n,t+=8,e+=1;t>=6;)i(r>>>t-6),t-=6},o.flush=function(){if(t>0&&(i(r<<6-t),r=0,t=0),e%3!=0)for(var o=3-e%3,a=0;o>a;a+=1)n+="="},o.toString=function(){return n},o},s=function(r){var t=r,e=0,n=0,o=0,i={};i.read=function(){for(;8>o;){if(e>=t.length){if(0==o)return-1;throw new Error("unexpected end of file./"+o)}var r=t.charAt(e);if(e+=1,"="==r)return o=0,-1;r.match(/^\s$/)||(n=n<<6|a(r.charCodeAt(0)),o+=6)}var i=n>>>o-8&255;return o-=8,i};var a=function(r){if(r>=65&&90>=r)return r-65;if(r>=97&&122>=r)return r-97+26;if(r>=48&&57>=r)return r-48+52;if(43==r)return 62;if(47==r)return 63;throw new Error("c:"+r)};return i},h=function(r,t){var e=r,n=t,o=new Array(r*t),i={};i.setPixel=function(r,t,n){o[t*e+r]=n},i.write=function(r){r.writeString("GIF87a"),r.writeShort(e),r.writeShort(n),r.writeByte(128),r.writeByte(0),r.writeByte(0),r.writeByte(0),r.writeByte(0),r.writeByte(0),r.writeByte(255),r.writeByte(255),r.writeByte(255),r.writeString(","),r.writeShort(0),r.writeShort(0),r.writeShort(e),r.writeShort(n),r.writeByte(0);var t=2,o=u(t);r.writeByte(t);for(var i=0;o.length-i>255;)r.writeByte(255),r.writeBytes(o,i,255),i+=255;r.writeByte(o.length-i),r.writeBytes(o,i,o.length-i),r.writeByte(0),r.writeString(";")};var a=function(r){var t=r,e=0,n=0,o={};return o.write=function(r,o){if(r>>>o!=0)throw new Error("length over");for(;e+o>=8;)t.writeByte(255&(r<<e|n)),o-=8-e,r>>>=8-e,n=0,e=0;n=r<<e|n,e+=o},o.flush=function(){e>0&&t.writeByte(n)},o},u=function(r){for(var t=1<<r,e=(1<<r)+1,n=r+1,i=f(),u=0;t>u;u+=1)i.add(String.fromCharCode(u));i.add(String.fromCharCode(t)),i.add(String.fromCharCode(e));var c=l(),g=a(c);g.write(t,n);var s=0,h=String.fromCharCode(o[s]);for(s+=1;s<o.length;){var v=String.fromCharCode(o[s]);s+=1,i.contains(h+v)?h+=v:(g.write(i.indexOf(h),n),i.size()<4095&&(i.size()==1<<n&&(n+=1),i.add(h+v)),h=v)}return g.write(i.indexOf(h),n),g.write(e,n),g.flush(),c.toByteArray()},f=function(){var r={},t=0,e={};return e.add=function(n){if(e.contains(n))throw new Error("dup key:"+n);r[n]=t,t+=1},e.size=function(){return t},e.indexOf=function(t){return r[t]},e.contains=function(t){return"undefined"!=typeof r[t]},e};return i},v=function(r,t,e,n){for(var o=h(r,t),i=0;t>i;i+=1)for(var a=0;r>a;a+=1)o.setPixel(a,i,e(a,i));var u=l();o.write(u);for(var f=g(),c=u.toByteArray(),s=0;s<c.length;s+=1)f.writeByte(c[s]);f.flush();var v="";return v+="<img",v+=' src="',v+="data:image/gif;base64,",v+=f,v+='"',v+=' width="',v+=r,v+='"',v+=' height="',v+=t,v+='"',n&&(v+=' alt="',v+=n,v+='"'),v+="/>"};return t}();return function(r){"function"==typeof define&&define.amd?define([],r):"object"==typeof exports&&(module.exports=r())}(function(){return r}),!function(r){r.stringToBytes=function(r){function t(r){for(var t=[],e=0;e<r.length;e++){var n=r.charCodeAt(e);128>n?t.push(n):2048>n?t.push(192|n>>6,128|63&n):55296>n||n>=57344?t.push(224|n>>12,128|n>>6&63,128|63&n):(e++,n=65536+((1023&n)<<10|1023&r.charCodeAt(e)),t.push(240|n>>18,128|n>>12&63,128|n>>6&63,128|63&n))}return t}return t(r)}}(r),r}());

生成二维码的代码有点多 不过没关系直接复制下来 就可以用了  

下面是支付回执

  1. @RequestMapping("weixin_notify")
  2. public void weixin_notify(HttpServletRequest request,HttpServletResponse response) throws Exception{
  3. //读取参数
  4. InputStream inputStream ;
  5. StringBuffer sb = new StringBuffer();
  6. inputStream = request.getInputStream();
  7. String s ;
  8. BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
  9. while ((s = in.readLine()) != null){
  10. sb.append(s);
  11. }
  12. in.close();
  13. inputStream.close();
  14.  
  15. //解析xml成map
  16. Map<String, String> m = new HashMap<String, String>();
  17. m = XMLUtil.doXMLParse(sb.toString());
  18.  
  19. //过滤空 设置 TreeMap
  20. SortedMap<Object,Object> packageParams = new TreeMap<Object,Object>();
  21. Iterator it = m.keySet().iterator();
  22. while (it.hasNext()) {
  23. String parameter = (String) it.next();
  24. String parameterValue = m.get(parameter);
  25.  
  26. String v = "";
  27. if(null != parameterValue) {
  28. v = parameterValue.trim();
  29. }
  30. packageParams.put(parameter, v);
  31. }
  32.  
  33. // 账号信息
  34. String key = Constants.WEIXIN_PAY_KEY; // key
  35.  
  36. logger.info(packageParams);
  37. //判断签名是否正确
  38. if(PayCommonUtil.isTenpaySign("UTF-8", packageParams,key)) {
  39. //------------------------------
  40. //处理业务开始
  41. //------------------------------
  42. String resXml = "";
  43. if("SUCCESS".equals((String)packageParams.get("result_code"))){
  44. // 这里是支付成功
  45. //////////执行自己的业务逻辑////////////////
  46.  
  47. //获取订单号
  48. String out_trade_no = (String)packageParams.get("out_trade_no");
  49. //调用根据订单号更改订单状态的方法
  50. //////////执行自己的业务逻辑////////////////
  51.  
  52. logger.info("支付成功");
  53. //通知微信.异步确认成功.必写.不然会一直通知后台.八次之后就认为交易失败了.
  54. resXml = "<xml>" + "<return_code><![CDATA[SUCCESS]]></return_code>"
  55. + "<return_msg><![CDATA[OK]]></return_msg>" + "</xml> ";
  56.  
  57. } else {
  58. logger.info("支付失败,错误信息:" + packageParams.get("err_code"));
  59. resXml = "<xml>" + "<return_code><![CDATA[FAIL]]></return_code>"
  60. + "<return_msg><![CDATA[报文为空]]></return_msg>" + "</xml> ";
  61. }
  62. //------------------------------
  63. //处理业务完毕
  64. //------------------------------
  65. BufferedOutputStream out = new BufferedOutputStream( response.getOutputStream());
  66. out.write(resXml.getBytes());
  67. out.flush();
  68. out.close();
  69. } else{
  70. logger.info("通知签名验证失败");
  71. }
  72.  
  73. }

下面是需要的工具类HttpUtil类用来请求接口的 如果有别的也可以代替

  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.io.OutputStreamWriter;
  5. import java.net.URL;
  6. import java.net.URLConnection;
  7.  
  8. //这个工具类是 根据url
  9. public class HttpUtil {
  10.  
  11. private final static int CONNECT_TIMEOUT = 5000; // in milliseconds
  12. private final static String DEFAULT_ENCODING = "UTF-8";
  13.  
  14. public static String postData(String urlStr, String data){
  15. return postData(urlStr, data, null);
  16. }
  17.  
  18. /****
  19. * 功能描述 根据url 请求接口 返回String数据
  20. * @param urlStr 接口地址
  21. * @param data
  22. * @param contentType
  23. * @return
  24. */
  25. public static String postData(String urlStr, String data, String contentType){
  26. BufferedReader reader = null;
  27. try {
  28. URL url = new URL(urlStr);
  29. URLConnection conn = url.openConnection();
  30. conn.setDoOutput(true);
  31. conn.setConnectTimeout(CONNECT_TIMEOUT);
  32. conn.setReadTimeout(CONNECT_TIMEOUT);
  33. if(contentType != null)
  34. conn.setRequestProperty("content-type", contentType);
  35. OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream(), DEFAULT_ENCODING);
  36. if(data == null)
  37. data = "";
  38. writer.write(data);
  39. writer.flush();
  40. writer.close();
  41.  
  42. reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), DEFAULT_ENCODING));
  43. StringBuilder sb = new StringBuilder();
  44. String line = null;
  45. while ((line = reader.readLine()) != null) {
  46. sb.append(line);
  47. sb.append("\r\n");
  48. }
  49. return sb.toString();
  50. } catch (IOException e) {
  51. e.getMessage();
  52.  
  53. } finally {
  54. try {
  55. if (reader != null)
  56. reader.close();
  57. } catch (IOException e) {
  58. }
  59. }
  60. return null;
  61. }
  62. }

下面是 PayCommonUtil工具类型 用来生成

  1. import java.text.SimpleDateFormat;
  2. import java.util.Date;
  3. import java.util.Iterator;
  4. import java.util.Map;
  5. import java.util.Set;
  6. import java.util.SortedMap;
  7.  
  8. import com.ruanyun.common.utils.MD5;
  9. import com.ruanyun.common.utils.MD5Util;
  10.  
  11. public class PayCommonUtil {
  12.  
  13. /**
  14. * 是否签名正确,规则是:按参数名称a-z排序,遇到空值的参数不参加签名。
  15. * @return boolean
  16. */
  17. public static boolean isTenpaySign(String characterEncoding, SortedMap<Object, Object> packageParams, String API_KEY) {
  18. StringBuffer sb = new StringBuffer();
  19. Set es = packageParams.entrySet();
  20. Iterator it = es.iterator();
  21. while(it.hasNext()) {
  22. Map.Entry entry = (Map.Entry)it.next();
  23. String k = (String)entry.getKey();
  24. String v = (String)entry.getValue();
  25. if(!"sign".equals(k) && null != v && !"".equals(v)) {
  26. sb.append(k + "=" + v + "&");
  27. }
  28. }
  29.  
  30. sb.append("key=" + API_KEY);
  31.  
  32. //算出摘要
  33. String mysign = MD5Util.MD5Encode(sb.toString(), characterEncoding).toLowerCase();
  34. String tenpaySign = ((String)packageParams.get("sign")).toLowerCase();
  35.  
  36. //System.out.println(tenpaySign + " " + mysign);
  37. return tenpaySign.equals(mysign);
  38. }
  39.  
  40. /**
  41. * @author
  42. * @date 2016-4-22
  43. * @Description:sign签名
  44. * @param characterEncoding
  45. * 编码格式
  46. * @param parameters
  47. * 请求参数
  48. * @return
  49. */
  50. public static String createSign(String characterEncoding, SortedMap<Object, Object> packageParams, String API_KEY) {
  51. StringBuffer sb = new StringBuffer();
  52. Set es = packageParams.entrySet(); //所有参与传参的参数按照accsii排序(升序)
  53. Iterator it = es.iterator();
  54. while (it.hasNext()) {
  55. Map.Entry entry = (Map.Entry) it.next();
  56. String k = (String) entry.getKey();
  57. String v = (String) entry.getValue();
  58. if (null != v && !"".equals(v) && !"sign".equals(k) && !"key".equals(k)) {
  59. sb.append(k + "=" + v + "&");
  60. }
  61. }
  62. sb.append("key=" + API_KEY);
  63. System.out.println("StringQ:参数排列顺序"+sb.toString());
  64. String sign = MD5.MD5Encode(sb.toString(),characterEncoding).toUpperCase(); //sign必须是大写
  65. return sign;
  66. }
  67.  
  68. /**
  69. * @author
  70. * @date 2016-4-22
  71. * @Description:将请求参数转换为xml格式的string
  72. * @param parameters
  73. * 请求参数
  74. * @return
  75. */
  76. public static String getRequestXml(SortedMap<Object, Object> parameters) {
  77. StringBuffer sb = new StringBuffer();
  78. sb.append("<xml>");
  79. Set es = parameters.entrySet();
  80. Iterator it = es.iterator();
  81. while (it.hasNext()) {
  82. Map.Entry entry = (Map.Entry) it.next();
  83. String k = (String) entry.getKey();
  84. String v = (String) entry.getValue();
  85. if ("attach".equalsIgnoreCase(k) || "body".equalsIgnoreCase(k) || "sign".equalsIgnoreCase(k)) {
  86. sb.append("<" + k + ">" + "<![CDATA[" + v + "]]></" + k + ">");
  87. } else {
  88. sb.append("<" + k + ">" + v + "</" + k + ">");
  89. }
  90. }
  91. sb.append("</xml>");
  92. return sb.toString();
  93. }
  94.  
  95. /**
  96. * 取出一个指定长度大小的随机正整数.
  97. *
  98. * @param length
  99. * int 设定所取出随机数的长度。length小于11
  100. * @return int 返回生成的随机数。
  101. */
  102. public static int buildRandom(int length) {
  103. int num = 1;
  104. double random = Math.random();
  105. if (random < 0.1) {
  106. random = random + 0.1;
  107. }
  108. for (int i = 0; i < length; i++) {
  109. num = num * 10;
  110. }
  111. return (int) ((random * num));
  112. }
  113.  
  114. /**
  115. * 获取当前时间 yyyyMMddHHmmss
  116. *
  117. * @return String
  118. */
  119. public static String getCurrTime() {
  120. Date now = new Date();
  121. SimpleDateFormat outFormat = new SimpleDateFormat("yyyyMMddHHmmss");
  122. String s = outFormat.format(now);
  123. return s;
  124. }
  125.  
  126. }

下面是XMLUtil类

  1. import java.io.ByteArrayInputStream;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.util.HashMap;
  5. import java.util.Iterator;
  6. import java.util.List;
  7. import java.util.Map;
  8.  
  9. import org.jdom.Document;
  10. import org.jdom.Element;
  11. import org.jdom.JDOMException;
  12. import org.jdom.input.SAXBuilder;
  13.  
  14. public class XMLUtil {
  15.  
  16. /**
  17. * 解析xml,返回第一级元素键值对。如果第一级元素有子节点,则此节点的值是子节点的xml数据。
  18. * @param strxml
  19. * @return
  20. * @throws JDOMException
  21. * @throws IOException
  22. */
  23. public static Map doXMLParse(String strxml) throws JDOMException, IOException {
  24. strxml = strxml.replaceFirst("encoding=\".*\"", "encoding=\"UTF-8\"");
  25.  
  26. if(null == strxml || "".equals(strxml)) {
  27. return null;
  28. }
  29.  
  30. Map m = new HashMap();
  31.  
  32. InputStream in = new ByteArrayInputStream(strxml.getBytes("UTF-8"));
  33. SAXBuilder builder = new SAXBuilder();
  34. Document doc = builder.build(in);
  35. Element root = doc.getRootElement();
  36. List list = root.getChildren();
  37. Iterator it = list.iterator();
  38. while(it.hasNext()) {
  39. Element e = (Element) it.next();
  40. String k = e.getName();
  41. String v = "";
  42. List children = e.getChildren();
  43. if(children.isEmpty()) {
  44. v = e.getTextNormalize();
  45. } else {
  46. v = XMLUtil.getChildrenText(children);
  47. }
  48.  
  49. m.put(k, v);
  50. }
  51.  
  52. //关闭流
  53. in.close();
  54.  
  55. return m;
  56. }
  57.  
  58. /**
  59. * 获取子结点的xml
  60. * @param children
  61. * @return String
  62. */
  63. public static String getChildrenText(List children) {
  64. StringBuffer sb = new StringBuffer();
  65. if(!children.isEmpty()) {
  66. Iterator it = children.iterator();
  67. while(it.hasNext()) {
  68. Element e = (Element) it.next();
  69. String name = e.getName();
  70. String value = e.getTextNormalize();
  71. List list = e.getChildren();
  72. sb.append("<" + name + ">");
  73. if(!list.isEmpty()) {
  74. sb.append(XMLUtil.getChildrenText(list));
  75. }
  76. sb.append(value);
  77. sb.append("</" + name + ">");
  78. }
  79. }
  80.  
  81. return sb.toString();
  82. }
  83.  
  84. }

最后是md5 工具类

  1. import java.security.MessageDigest;
  2.  
  3. public class MD5 {
  4.  
  5. private static String byteArrayToHexString(byte b[]) {
  6. StringBuffer resultSb = new StringBuffer();
  7. for (int i = 0; i < b.length; i++)
  8. resultSb.append(byteToHexString(b[i]));
  9.  
  10. return resultSb.toString();
  11. }
  12.  
  13. private static String byteToHexString(byte b) {
  14. int n = b;
  15. if (n < 0)
  16. n += 256;
  17. int d1 = n / 16;
  18. int d2 = n % 16;
  19. return hexDigits[d1] + hexDigits[d2];
  20. }
  21.  
  22. public static String MD5Encode(String origin, String charsetname) {
  23. String resultString = null;
  24. try {
  25. resultString = new String(origin);
  26. MessageDigest md = MessageDigest.getInstance("MD5");
  27. if (charsetname == null || "".equals(charsetname))
  28. resultString = byteArrayToHexString(md.digest(resultString
  29. .getBytes()));
  30. else
  31. resultString = byteArrayToHexString(md.digest(resultString
  32. .getBytes(charsetname)));
  33. } catch (Exception exception) {
  34. }
  35. return resultString;
  36. }
  37.  
  38. private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5",
  39. "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
  40.  
  41. }
  42.  
  43. 转载自http://www.cnblogs.com/jishuzhaichen/p/6377741.html。

微信扫码支付功能详细教程————Java的更多相关文章

  1. 微信扫码支付springboot版本

    发布时间:2018-11-06   技术:springboot+freemarker   概述 该项目是一个采用springboot构建的web项目,主要实现了微信扫码支付功能.包含最基本的创建订单, ...

  2. 【移动支付】.NET微信扫码支付接入(模式二-NATIVE)

    一.前言       经过两三天的琢磨总算完成了微信扫码支付功能,不得不感叹几句: 微信提供的DEMO不错,直接复制粘贴就可以跑起来了: 微信的配置平台我真是服了.公众平台.商户平台.开放平台,一个平 ...

  3. JAVA微信扫码支付模式二功能实现完整例子

    概述 本例子实现微信扫码支付模式二的支付功能,应用场景是,web网站微信扫码支付.实现从点击付费按钮.到弹出二维码.到用户用手机微信扫码支付.到手机上用户付费成功.web网页再自动调整到支付成功后的页 ...

  4. PHP PC端微信扫码支付【模式二】详细教程-附带源码(转)

    博主写这破玩意儿的时候花了大概快两天时间才整体的弄懂逻辑,考虑了一下~还是把所有代码都放出来给大家~抱着开源大无私的精神!谁叫我擅长拍黄片呢?同时也感谢我刚入行时候那些无私帮过我的程序员们! 首先还是 ...

  5. Java SpringMVC实现PC端网页微信扫码支付完整版

    一:前期微信支付扫盲知识 前提条件是已经有申请了微信支付功能的公众号,然后我们需要得到公众号APPID和微信商户号,这个分别在微信公众号和微信支付商家平台上面可以发现.其实在你申请成功支付功能之后,微 ...

  6. ASP.NET Core Web 支付功能接入 微信-扫码支付篇

    这篇文章将介绍ASP.NET Core中使用 开源项目 Payment,实现接入微信-扫码支付及异步通知功能. 开发环境:Win 10 x64.VS2017 15.6.4..NET Core SDK ...

  7. 【转载】ASP.NET Core Web 支付功能接入 微信-扫码支付篇

    转自:http://www.cnblogs.com/essenroc/p/8630730.html 这篇文章将介绍ASP.NET Core中使用 开源项目 Payment,实现接入微信-扫码支付及异步 ...

  8. java微信扫码支付Native(模式二)

    官方开发文档模式二的地址:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_5 pom文件的依赖: <?xml versio ...

  9. ASP.NET Core Web 支付功能接入 微信-扫码支付篇(转)

    原文 https://www.cnblogs.com/essenroc/p/8630730.html // 随着版本更迭,新版本可能无法完全适用,请参考仓库内的示例. 这篇文章将介绍ASP.NET C ...

随机推荐

  1. 学习爬虫的day03 (通过代理去爬去数据)

    代理的IP通过去网上找# -*- coding: utf-8 -*- import re import _thread from time import sleep, ctime from urlli ...

  2. This package contains perl-5.16.3, java8, nifi-1.1.2 on ubuntu:14.04

    [How to build:]cd /home/ops/work/demo/docker/aws/srctouch Dockerfiledocker build -t aws_src_image:v1 ...

  3. Linux服务器病毒清理实践

    背景:客户服务器被挂载木马病毒用以挖矿(比特币). 本次清理通过Linux基本命令完成.其原理也比较简单,通过ps命令查看服务器异常进程,然后通过lsof命令定位进程访问的文件,找到异常文件删除之,最 ...

  4. mysql 索引类型

    根据类型分为普通索引2种类型,hash 和b-tree   最常用    hash是按一对一索引的.速度 最快但不支持范围 比如where name = 'dd' 最快.但是使用 date >3 ...

  5. JAVA调用WCF

    Java环境下生成代理类的工具有很多,如wsdl2Java,wsimport 等.本文中使用的工具是wsimport. 1.wsdl2Java 生成命令实例: wsdl2Java -p package ...

  6. 利用InfluxDB和Grafana搭建数据监测的仪表盘

    InfluxDB的介绍及安装 InfluxDB是支持持续写入的时序数据库,常用于监测系统所需要的数据的存储. 官网的详细安装步骤 https://docs.influxdata.com/influxd ...

  7. python面向对象其他相关-异常处理-反射

    1.isinstance(obj, cls) 检查是否obj是否是类 cls 的对象   2.issubclass(sub, super) 检查sub类是否是 super 类的派生类 n1 = 10 ...

  8. Web前端学习——JavaScript

    一.JavaScript介绍JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚 ...

  9. 【NOIP2015提高组】跳石头

    https://www.luogu.org/problem/show?pid=2678 最小值最大问题,二分答案.每次检查是否能仅移走m块岩石使得所有跳跃距离均大于等于mid. #include &l ...

  10. poj 1035KINA Is Not Abbreviation

    题目链接:http://poj.org/problem?id=4054 本题的题意是在下面那部分待检验的单词中找到与之相对应的正确的代词,包含几种情况,一是全部字母相同,二是有一个字母不相同,三是多一 ...