前言  首先声明 我并非原创 原创是 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.扫码页面最后处理 (用定时函数不停的获取该订单编号的状态 如果是已付款 弹出支付成功 跳转到相应的页面)

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

public String weixin_pay(Integer orderId) throws Exception { TPredepositOrder predepositOrder=predepositOrderService.getPredepositOrderInfoById(orderId);//根据订单号获取订单信息// 账号信息  String appid = Constants.appid;           // appid  开发者id 登录公众号》开发》基本配置 AppID(应用ID)后面就是String mch_id =Constants.WEIXIN_MCH_ID;   // 商业号  不知道的问你老板要String key = Constants.WEIXIN_PAY_KEY;    // key    登录微信商户号后,找到账户设置 -> 密码安全 -> API安全 -> API密钥;不会的这个有个地址点开看 http://www.2cto.com/weixin/201506/412421.html
             //根据时间生成随机字符串String currTime = PayCommonUtil.getCurrTime();  String strTime = currTime.substring(8, currTime.length());  String strRandom = PayCommonUtil.buildRandom(4) + "";  String nonce_str = strTime + strRandom;  

        //价格处理   Double price=predepositOrder.getPreDeposit();int total_fee=(int) (price*100);String order_price =total_fee+"";           // 价格   注意:价格的单位是分  

String body = "天天酷跑-游戏充值";            // 商品名称 格式必须是 公司名称-商品名称  String out_trade_no = orderId.toString();   // 订单号  // 获取发起电脑 ip String ip=InetAddress.getLocalHost().toString();ip=ip.substring(ip.lastIndexOf('/')+1,ip.length());System.out.println("本机的IP = " +ip);String spbill_create_ip =ip;  // 回调接口回调地址   String notify_url = Constants.NOTIFY_URL;  String trade_type = "NATIVE";  //支付类型 网页扫码支付就用这个 不解释SortedMap<Object,Object> packageParams = new TreeMap<Object,Object>();  packageParams.put("appid", appid);packageParams.put("body", body);  packageParams.put("mch_id", mch_id);  packageParams.put("nonce_str",nonce_str);packageParams.put("notify_url", notify_url);  packageParams.put("out_trade_no",out_trade_no);packageParams.put("spbill_create_ip", spbill_create_ip); packageParams.put("total_fee", order_price);packageParams.put("trade_type", trade_type);String sign = PayCommonUtil.createSign("UTF-8",packageParams,key);  packageParams.put("sign",sign);  String requestXML = PayCommonUtil.getRequestXml(packageParams);  System.out.println(requestXML);  String resXml = HttpUtil.postData("https://api.mch.weixin.qq.com/pay/unifiedorder",requestXML);//这个是微信返回url的接口地址 System.out.println("返回的xml信息"+resXml);Map map = XMLUtil.doXMLParse(resXml);  String urlCode = (String) map.get("code_url"); System.out.println("支付地址"+urlCode);return urlCode;
} 

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

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

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

生成二维码的 js

/* 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+=" background-color: ",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}());

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

下面是支付回执

@RequestMapping("weixin_notify")public void weixin_notify(HttpServletRequest request,HttpServletResponse response) throws Exception{  //读取参数
        InputStream inputStream ;  StringBuffer sb = new StringBuffer();  inputStream = request.getInputStream();  String s ;  BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));  while ((s = in.readLine()) != null){  sb.append(s);  }  in.close();  inputStream.close();  //解析xml成map  Map<String, String> m = new HashMap<String, String>();  m = XMLUtil.doXMLParse(sb.toString());  //过滤空 设置 TreeMap  SortedMap<Object,Object> packageParams = new TreeMap<Object,Object>();        Iterator it = m.keySet().iterator();  while (it.hasNext()) {  String parameter = (String) it.next();  String parameterValue = m.get(parameter);  String v = "";  if(null != parameterValue) {  v = parameterValue.trim();  }  packageParams.put(parameter, v);  }  // 账号信息  String key = Constants.WEIXIN_PAY_KEY; // key
  logger.info(packageParams);  //判断签名是否正确  if(PayCommonUtil.isTenpaySign("UTF-8", packageParams,key)) {  //------------------------------  //处理业务开始  //------------------------------  String resXml = "";  if("SUCCESS".equals((String)packageParams.get("result_code"))){  // 这里是支付成功  //执行自己的业务逻辑  

                //获取订单号String out_trade_no = (String)packageParams.get("out_trade_no");  //调用根据订单号更改订单状态的方法
//执行自己的业务逻辑
                  logger.info("支付成功");  //通知微信.异步确认成功.必写.不然会一直通知后台.八次之后就认为交易失败了.  resXml = "<xml>" + "<return_code><![CDATA[SUCCESS]]></return_code>"  + "<return_msg><![CDATA[OK]]></return_msg>" + "</xml> ";  } else {  logger.info("支付失败,错误信息:" + packageParams.get("err_code"));  resXml = "<xml>" + "<return_code><![CDATA[FAIL]]></return_code>"  + "<return_msg><![CDATA[报文为空]]></return_msg>" + "</xml> ";  }  //------------------------------  //处理业务完毕  //------------------------------  BufferedOutputStream out = new BufferedOutputStream(  response.getOutputStream());  out.write(resXml.getBytes());  out.flush();  out.close();  } else{  logger.info("通知签名验证失败");  }  }  

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

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;//这个工具类是 根据url
public class HttpUtil {  private final static int CONNECT_TIMEOUT = 5000; // in milliseconds  private final static String DEFAULT_ENCODING = "UTF-8";  public static String postData(String urlStr, String data){  return postData(urlStr, data, null);  }  /***** 功能描述 根据url    请求接口  返回String数据* @param urlStr    接口地址* @param data  * @param contentType* @return*/public static String postData(String urlStr, String data, String contentType){  BufferedReader reader = null;  try {  URL url = new URL(urlStr);  URLConnection conn = url.openConnection();  conn.setDoOutput(true);  conn.setConnectTimeout(CONNECT_TIMEOUT);  conn.setReadTimeout(CONNECT_TIMEOUT);  if(contentType != null)  conn.setRequestProperty("content-type", contentType);  OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream(), DEFAULT_ENCODING);  if(data == null)  data = "";  writer.write(data);   writer.flush();  writer.close();    reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), DEFAULT_ENCODING));  StringBuilder sb = new StringBuilder();  String line = null;  while ((line = reader.readLine()) != null) {  sb.append(line);  sb.append("\r\n");  }  return sb.toString();  } catch (IOException e) { e.getMessage();} finally {  try {  if (reader != null)  reader.close();  } catch (IOException e) {  }  }  return null;  }
}  

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

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;import com.ruanyun.common.utils.MD5;
import com.ruanyun.common.utils.MD5Util;public class PayCommonUtil {  /** * 是否签名正确,规则是:按参数名称a-z排序,遇到空值的参数不参加签名。 * @return boolean */  public static boolean isTenpaySign(String characterEncoding, SortedMap<Object, Object> packageParams, String API_KEY) {  StringBuffer sb = new StringBuffer();  Set es = packageParams.entrySet();  Iterator it = es.iterator();  while(it.hasNext()) {  Map.Entry entry = (Map.Entry)it.next();  String k = (String)entry.getKey();  String v = (String)entry.getValue();  if(!"sign".equals(k) && null != v && !"".equals(v)) {  sb.append(k + "=" + v + "&");  }  }  sb.append("key=" + API_KEY);  //算出摘要  String mysign = MD5Util.MD5Encode(sb.toString(), characterEncoding).toLowerCase();  String tenpaySign = ((String)packageParams.get("sign")).toLowerCase();  //System.out.println(tenpaySign + "    " + mysign);  return tenpaySign.equals(mysign);  }  /** * @author * @date 2016-4-22 * @Description:sign签名 * @param characterEncoding *            编码格式 * @param parameters *            请求参数 * @return */  public static String createSign(String characterEncoding, SortedMap<Object, Object> packageParams, String API_KEY) {  StringBuffer sb = new StringBuffer();  Set es = packageParams.entrySet();  //所有参与传参的参数按照accsii排序(升序)  Iterator it = es.iterator();  while (it.hasNext()) {  Map.Entry entry = (Map.Entry) it.next();  String k = (String) entry.getKey();  String v = (String) entry.getValue();  if (null != v && !"".equals(v) && !"sign".equals(k) && !"key".equals(k)) {  sb.append(k + "=" + v + "&");  }  }  sb.append("key=" + API_KEY); System.out.println("StringQ:参数排列顺序"+sb.toString());String sign = MD5.MD5Encode(sb.toString(),characterEncoding).toUpperCase();  //sign必须是大写return sign;  }  /** * @author * @date 2016-4-22 * @Description:将请求参数转换为xml格式的string * @param parameters *            请求参数 * @return */  public static String getRequestXml(SortedMap<Object, Object> parameters) {  StringBuffer sb = new StringBuffer();  sb.append("<xml>");  Set es = parameters.entrySet();  Iterator it = es.iterator();  while (it.hasNext()) {  Map.Entry entry = (Map.Entry) it.next();  String k = (String) entry.getKey();  String v = (String) entry.getValue();  if ("attach".equalsIgnoreCase(k) || "body".equalsIgnoreCase(k) || "sign".equalsIgnoreCase(k)) {  sb.append("<" + k + ">" + "<![CDATA[" + v + "]]></" + k + ">");  } else {  sb.append("<" + k + ">" + v + "</" + k + ">");  }  }  sb.append("</xml>");  return sb.toString();  }  /** * 取出一个指定长度大小的随机正整数. *  * @param length *            int 设定所取出随机数的长度。length小于11 * @return int 返回生成的随机数。 */  public static int buildRandom(int length) {  int num = 1;  double random = Math.random();  if (random < 0.1) {  random = random + 0.1;  }  for (int i = 0; i < length; i++) {  num = num * 10;  }  return (int) ((random * num));  }  /** * 获取当前时间 yyyyMMddHHmmss *  * @return String */  public static String getCurrTime() {  Date now = new Date();  SimpleDateFormat outFormat = new SimpleDateFormat("yyyyMMddHHmmss");  String s = outFormat.format(now);  return s;  }  }

下面是XMLUtil类

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;public class XMLUtil {/** * 解析xml,返回第一级元素键值对。如果第一级元素有子节点,则此节点的值是子节点的xml数据。 * @param strxml * @return * @throws JDOMException * @throws IOException */  public static Map doXMLParse(String strxml) throws JDOMException, IOException {  strxml = strxml.replaceFirst("encoding=\".*\"", "encoding=\"UTF-8\"");  if(null == strxml || "".equals(strxml)) {  return null;  }  Map m = new HashMap();  InputStream in = new ByteArrayInputStream(strxml.getBytes("UTF-8"));  SAXBuilder builder = new SAXBuilder();  Document doc = builder.build(in);  Element root = doc.getRootElement();  List list = root.getChildren();  Iterator it = list.iterator();  while(it.hasNext()) {  Element e = (Element) it.next();  String k = e.getName();  String v = "";  List children = e.getChildren();  if(children.isEmpty()) {  v = e.getTextNormalize();  } else {  v = XMLUtil.getChildrenText(children);  }  m.put(k, v);  }  //关闭流
        in.close();  return m;  }  /** * 获取子结点的xml * @param children * @return String */  public static String getChildrenText(List children) {  StringBuffer sb = new StringBuffer();  if(!children.isEmpty()) {  Iterator it = children.iterator();  while(it.hasNext()) {  Element e = (Element) it.next();  String name = e.getName();  String value = e.getTextNormalize();  List list = e.getChildren();  sb.append("<" + name + ">");  if(!list.isEmpty()) {  sb.append(XMLUtil.getChildrenText(list));  }  sb.append(value);  sb.append("</" + name + ">");  }  }  return sb.toString();  }  }  

最后是md5 工具类

import java.security.MessageDigest;public class MD5 {private static String byteArrayToHexString(byte b[]) {  StringBuffer resultSb = new StringBuffer();  for (int i = 0; i < b.length; i++)  resultSb.append(byteToHexString(b[i]));  return resultSb.toString();  }  private static String byteToHexString(byte b) {  int n = b;  if (n < 0)  n += 256;  int d1 = n / 16;  int d2 = n % 16;  return hexDigits[d1] + hexDigits[d2];  }  public static String MD5Encode(String origin, String charsetname) {  String resultString = null;  try {  resultString = new String(origin);  MessageDigest md = MessageDigest.getInstance("MD5");  if (charsetname == null || "".equals(charsetname))  resultString = byteArrayToHexString(md.digest(resultString  .getBytes()));  else  resultString = byteArrayToHexString(md.digest(resultString  .getBytes(charsetname)));  } catch (Exception exception) {  }  return resultString;  }  private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5",  "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };  }

本人qq1322484007 有问题可以互相讨论

转载于:https://www.cnblogs.com/jishuzhaichen/p/6377741.html

微信扫码支付功能详细教程————Java相关推荐

  1. 微信扫码支付功能(1)---通过谷歌二维码工具生成付款码

    生成付款二维码 一.微信网站扫码支付介绍 1.扫码支付文档 微信开发官方文档:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_5 ...

  2. 微信扫码支付功能(2)---用户扫码支付成功,微信异步回调商户接口

    用户扫码支付成功,微信异步回调商户 上一篇博客完成用户扫码支付功能: https://www.cnblogs.com/qdhxhz/p/9708534.html 当用户扫码支付成功之后,微信会异步回调 ...

  3. Winfrom实现微信扫码支付功能

    winfrom实现微信扫码支付 实现逻辑:生成订单展示二维码-轮询检查支付结果-直到支付成功 看图,是不是你需要实现的效果,我是用的轮询的方式检查是否支付成功 微信扫码支付 下载地址:https:// ...

  4. 微信扫码登录超详细教程

    一.OAuth2 1.OAuth2介绍 2.OAuth2解决什么问题 (1)OAuth2提出的背景   照片拥有者想要在云冲印服务上打印照片,云冲印服务需要访问云存储服务上的资源.(2)图例   资源 ...

  5. springboot 实现 订单 和 微信扫码支付 功能

    1:下面是简单生成订单和支付的流程 后端实现 1: 首先开发 生成订单接口,根据订单查询接口, 生成微信支付的二维码的接口,查询订单支付的状态的接口 @Api(tags="订单接口" ...

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

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

  7. 随手记录JAVA微信扫码支付模式二功能

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

  8. JAVA微信扫码支付及微信App支付开发(模式二)完整功能实现

    一,准备工作 事前申请一个商家版的微信公众号(目前微信支付只有商家版公众号可开通),然后开通微信支付功能,并做相应的配置. 申请开通微信公众号和开通微信支付需要等待审核,一般都5个工作日左右.开通成功 ...

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

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

最新文章

  1. XFire发布Web Services
  2. SQL语句中各个部分的执行顺序(转)
  3. 探究Jvm源码实现-MarkWord
  4. SpringCloud中父子pom的结构和写法
  5. 中间件技术及双十一实践·服务框架篇
  6. PyODPS DataFrame 处理笛卡尔积的几种方式
  7. javascript中索引_如何在JavaScript中找到数字在数组中所属的索引
  8. SAP License:FI-SAP新总账功能(一)
  9. Python爬虫周记之案例篇——基金净值Selenium动态爬虫
  10. python的常量_python常量 (最全常量解析)
  11. git submodule详解
  12. 【Unity3D基础2-2】认识Unity3D引擎
  13. 智能猫眼背后场景数据,助力把好居家安防第一关
  14. 截止失真放大电路_聊一下三极管截止、放大和饱和3种工作状态
  15. 每日一思(2022.5.19)——前无古人后无来者
  16. radare2 和 EVM
  17. 飞思卡尔单片机PLL时钟总线模块
  18. 50ETF期权与期货的区别
  19. meanshift 与 camshift 跟踪算法比较
  20. Caffeine - Caches - Removal

热门文章

  1. sharepoint 2010 beta Workflow
  2. 高分辨率扫描出来的图片有摩尔纹_ue4 摩尔纹 远处模型闪烁问题
  3. json schema多种形式_什么是JSON Schema?
  4. 闪电Android视频转换器,闪电视频转换器
  5. java http 401_服务器返回HTTP响应代码:401,URL:https
  6. python爬虫 django搜索修改更新数据_django_数据库操作—增、删、改、查
  7. python中文字符串编码_浅谈python下含中文字符串正则表达式的编码问题
  8. java操作dom节点的添加_java操作DOM节点的添加,删除,修改
  9. 查看磁盤使用情况linux,在Linux系统下安装Filelight来查看磁盘使用情况
  10. C#中创建DLL(动态链接库)及其使用