<fieldset id="cok4e"><pre id="cok4e"></pre></fieldset>
<source id="cok4e"><acronym id="cok4e"></acronym></source>
  • <fieldset id="cok4e"><pre id="cok4e"></pre></fieldset>
     \r\n  \r\n    訂單號(hào): \r\n   \r\n <\/form> \r\n <\/br><\/br> \r\n   \r\n    訂單號(hào): \r\n   \r\n <\/form> \r\n <\/body> \r\n<\/html><\/pre>

    2  編寫一個(gè)servlet用于通過Oauth獲取code<\/p>

    package com.debug.weixin.servlet; \r\n  \r\nimport java.io.IOException; \r\nimport java.io.PrintWriter; \r\n  \r\nimport javax.servlet.RequestDispatcher; \r\nimport javax.servlet.ServletException; \r\nimport javax.servlet.http.HttpServlet; \r\nimport javax.servlet.http.HttpServletRequest; \r\nimport javax.servlet.http.HttpServletResponse; \r\n  \r\nimport com.debug.weixin.util.CommonUtil; \r\nimport com.debug.weixin.util.ServerConfig; \r\n  \r\npublic class OauthServlet extends HttpServlet { \r\n  \r\n   \r\n public void doGet(HttpServletRequest request, HttpServletResponse response) \r\n   throws ServletException, IOException { \r\n  \r\n  this.doPost(request, response); \r\n } \r\n  \r\n public void doPost(HttpServletRequest request, HttpServletResponse response) \r\n   throws ServletException, IOException { \r\n  \r\n   String orderNo=request.getParameter(\"orderNo\"); \r\n   \/\/調(diào)用微信Oauth2.0獲取openid \r\n   String redirectURL=ServerConfig.SERVERDOMAIN+\"\/BasicWeixin\/payServletForH5?orderNo=\"+orderNo; \r\n   String redirectURI=\"\"; \r\n   try { \r\n    redirectURI=CommonUtil.initOpenId(redirectURL); \r\n   } catch (Exception e) { \r\n   \/\/ TODO Auto-generated catch block \r\n   e.printStackTrace(); \r\n   } \r\n   \/\/System.out.println(redirectURI); \r\n   \/\/RequestDispatcher dis= request.getRequestDispatcher(redirectURI); \r\n   \/\/dis.forward(request, response); \r\n   response.sendRedirect(redirectURI); \r\n } \r\n  \r\n}<\/pre>

    3 獲取到code后,通過REDIRECTURI獲取openId,調(diào)用統(tǒng)一下單接口<\/p>

    package com.debug.weixin.servlet; \r\n  \r\nimport java.io.IOException; \r\nimport java.io.PrintWriter; \r\nimport java.util.SortedMap; \r\nimport java.util.TreeMap; \r\n  \r\nimport javax.servlet.RequestDispatcher; \r\nimport javax.servlet.ServletException; \r\nimport javax.servlet.http.HttpServlet; \r\nimport javax.servlet.http.HttpServletRequest; \r\nimport javax.servlet.http.HttpServletResponse; \r\n  \r\nimport com.debug.weixin.pojo.WeixinOauth2Token; \r\nimport com.debug.weixin.pojo.WeixinQRCode; \r\nimport com.debug.weixin.util.AdvancedUtil; \r\nimport com.debug.weixin.util.CommonUtil; \r\nimport com.debug.weixin.util.ConfigUtil; \r\nimport com.debug.weixin.util.PayCommonUtil; \r\n  \r\npublic class PayServletForH5 extends HttpServlet { \r\n  \r\n   \r\n public void doGet(HttpServletRequest request, HttpServletResponse response) \r\n   throws ServletException, IOException { \r\n  \r\n  this.doPost(request, response); \r\n } \r\n  \r\n public void doPost(HttpServletRequest request, HttpServletResponse response) \r\n   throws ServletException, IOException { \r\n   String orderNo=request.getParameter(\"orderNo\"); \r\n   String code=request.getParameter(\"code\"); \r\n    \r\n   \/\/獲取AccessToken \r\n    \r\n   WeixinOauth2Token token=AdvancedUtil.getOauth2AccessToken(ConfigUtil.APPID, ConfigUtil.APP_SECRECT, code); \r\n    \r\n   String openId=token.getOpenId(); \r\n    \r\n   \/\/調(diào)用微信統(tǒng)一支付接口 \r\n   SortedMap parameters = new TreeMap(); \r\n  parameters.put(\"appid\", ConfigUtil.APPID); \r\n  \r\n  parameters.put(\"mch_id\", ConfigUtil.MCH_ID); \r\n  parameters.put(\"device_info\", \"1000\"); \r\n  parameters.put(\"body\", \"我的測(cè)試訂單\"); \r\n  parameters.put(\"nonce_str\", PayCommonUtil.CreateNoncestr()); \r\n    \r\n     \r\n  parameters.put(\"out_trade_no\", orderNo); \r\n  \/\/parameters.put(\"total_fee\", String.valueOf(total)); \r\n  parameters.put(\"total_fee\", \"1\"); \r\n  parameters.put(\"spbill_create_ip\", request.getRemoteAddr()); \r\n  parameters.put(\"notify_url\", ConfigUtil.NOTIFY_URL); \r\n  parameters.put(\"trade_type\", \"JSAPI\"); \r\n  parameters.put(\"openid\", openId); \r\n  \r\n  String sign = PayCommonUtil.createSign(\"UTF-8\", parameters); \r\n  parameters.put(\"sign\", sign); \r\n  \r\n  String requestXML = PayCommonUtil.getRequestXml(parameters); \r\n  \r\n  String result = CommonUtil.httpsRequestForStr(ConfigUtil.UNIFIED_ORDER_URL,\"POST\", requestXML); \r\n  System.out.println(\"----------------------------------\"); \r\n  System.out.println(result); \r\n  System.out.println(\"----------------------------------\"); \r\n    \r\n  request.setAttribute(\"orderNo\", orderNo); \r\n  request.setAttribute(\"totalPrice\", \"0.01\"); \r\n  String payJSON=\"\"; \r\n  try { \r\n   payJSON=CommonUtil.getH5PayStr(result,request); \r\n     \r\n  } catch (Exception e) { \r\n   \/\/ TODO Auto-generated catch block \r\n   e.printStackTrace(); \r\n  } \r\n  \/\/System.out.println(payJSON); \r\n  request.setAttribute(\"unifiedOrder\",payJSON); \r\n    \r\n  RequestDispatcher dis= request.getRequestDispatcher(\"h5Pay.jsp\"); \r\n  dis.forward(request, response); \r\n } \r\n  \r\n}<\/pre>

    調(diào)用微信統(tǒng)一下單接口,需要注意簽名算法,只有簽名計(jì)算正確才能順利支付<\/p>

    public static String getH5PayStr(String result,HttpServletRequest request) throws Exception{ \r\n    \r\n   Map map = XMLUtil.doXMLParse(result); \r\n     \r\n     \r\n    SortedMap params = new TreeMap(); \r\n   params.put(\"appId\", ConfigUtil.APPID); \r\n   params.put(\"timeStamp\", Long.toString(new Date().getTime())); \r\n   params.put(\"nonceStr\", PayCommonUtil.CreateNoncestr()); \r\n   params.put(\"package\", \"prepay_id=\"+map.get(\"prepay_id\")); \r\n   params.put(\"signType\", ConfigUtil.SIGN_TYPE); \r\n   String paySign = PayCommonUtil.createSign(\"UTF-8\", params); \r\n    \r\n   params.put(\"paySign\", paySign);  \/\/paySign的生成規(guī)則和Sign的生成規(guī)則一致 \r\n    \r\n   String json = JSONObject.fromObject(params).toString(); \r\n    \r\n   return json; \r\n }<\/pre>

     4 編寫最終的支付界面調(diào)起微信H5支付<\/p>

    <%@ page language=\"java\" import=\"java.util.*\" pageEncoding=\"UTF-8\"%> \r\n<% \r\nString path = request.getContextPath(); \r\nString basePath = request.getScheme()+\":\/\/\"+request.getServerName()+\":\"+request.getServerPort()+path+\"\/\"; \r\n%> \r\n  \r\n \r\n \r\n  \r\n \"> \r\n   \r\n 微信H5支付<\/title> \r\n   \r\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0\"> \r\n  
    	
    <meta http-equiv="Cache-Control" content="no-transform" />
    <meta http-equiv="Cache-Control" content="no-siteapp" />
    <script>var V_PATH="/";window.onerror=function(){ return true; };</script>
    </head>
    
    <body data-commit-time="2023-12-28T14:50:12+08:00" class="editor_body body2_2">
    <h1><a href="http://m.miracleart.cn/">国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂</a></h1>
    	<link rel="stylesheet" type="text/css" href="/static/csshw/stylehw.css">
    <header>
        <div   id="377j5v51b"   class="head">
            <div   id="377j5v51b"   class="haed_left">
                <div   id="377j5v51b"   class="haed_logo">
                    <a href="http://m.miracleart.cn/ms/" title="" class="haed_logo_a">
                        <img src="/static/imghw/logo.png" alt="" class="haed_logoimg">
                    </a>
                </div>
                <div   id="377j5v51b"   class="head_nav">
                    <div   id="377j5v51b"   class="head_navs">
                        <a href="javascript:;" title="masyarakat" class="head_nava head_nava-template1">masyarakat</a>
                        <div   class="377j5v51b"   id="dropdown-template1" style="display: none;">
                            <div   id="377j5v51b"   class="languagechoose">
                                <a href="http://m.miracleart.cn/ms/article.html" title="Artikel" class="languagechoosea on">Artikel</a>
                                <a href="http://m.miracleart.cn/ms/faq/zt" title="Topik" class="languagechoosea">Topik</a>
                                <a href="http://m.miracleart.cn/ms/wenda.html" title="Soal Jawab" class="languagechoosea">Soal Jawab</a>
                            </div>
                        </div>
                    </div>
    
                    <div   id="377j5v51b"   class="head_navs">
                        <a href="javascript:;" title="Belajar" class="head_nava head_nava-template1_1">Belajar</a>
                        <div   class="377j5v51b"   id="dropdown-template1_1" style="display: none;">
                            <div   id="377j5v51b"   class="languagechoose">
                                <a href="http://m.miracleart.cn/ms/course.html" title="Kursus" class="languagechoosea on">Kursus</a>
                                <a href="http://m.miracleart.cn/ms/dic/" title="Kamus Pengaturcaraan" class="languagechoosea">Kamus Pengaturcaraan</a>
                            </div>
                        </div>
                    </div>
    
                    <div   id="377j5v51b"   class="head_navs">
                        <a href="javascript:;" title="Perpustakaan Alatan" class="head_nava head_nava-template1_2">Perpustakaan Alatan</a>
                        <div   class="377j5v51b"   id="dropdown-template1_2" style="display: none;">
                            <div   id="377j5v51b"   class="languagechoose">
                                <a href="http://m.miracleart.cn/ms/toolset/development-tools" title="Alat pembangunan" class="languagechoosea on">Alat pembangunan</a>
                                <a href="http://m.miracleart.cn/ms/toolset/website-source-code" title="Kod sumber laman web" class="languagechoosea">Kod sumber laman web</a>
                                <a href="http://m.miracleart.cn/ms/toolset/php-libraries" title="Perpustakaan PHP" class="languagechoosea">Perpustakaan PHP</a>
                                <a href="http://m.miracleart.cn/ms/toolset/js-special-effects" title="Kesan khas JS" class="languagechoosea on">Kesan khas JS</a>
                                <a href="http://m.miracleart.cn/ms/toolset/website-materials" title="Bahan laman web" class="languagechoosea on">Bahan laman web</a>
                                <a href="http://m.miracleart.cn/ms/toolset/extension-plug-ins" title="Pemalam sambungan" class="languagechoosea on">Pemalam sambungan</a>
                            </div>
                        </div>
                    </div>
    
                    <div   id="377j5v51b"   class="head_navs">
                        <a href="http://m.miracleart.cn/ms/ai" title="Alat AI" class="head_nava head_nava-template1_3">Alat AI</a>
                    </div>
    
                    <div   id="377j5v51b"   class="head_navs">
                        <a href="javascript:;" title="Masa lapang" class="head_nava head_nava-template1_3">Masa lapang</a>
                        <div   class="377j5v51b"   id="dropdown-template1_3" style="display: none;">
                            <div   id="377j5v51b"   class="languagechoose">
                                <a href="http://m.miracleart.cn/ms/game" title="Muat Turun Permainan" class="languagechoosea on">Muat Turun Permainan</a>
                                <a href="http://m.miracleart.cn/ms/mobile-game-tutorial/" title="Tutorial Permainan" class="languagechoosea">Tutorial Permainan</a>
    
                            </div>
                        </div>
                    </div>
                </div>
            </div>
                        <div   id="377j5v51b"   class="head_search">
                    <input id="key_words"  onkeydown="if (event.keyCode == 13) searchs('ms')" class="search-input" type="text" autocomplete="off" name="keywords" required="required" placeholder="Block,address,transaction,news" value="">
                    <a href="javascript:;" title="cari"  onclick="searchs('ms')"><img src="/static/imghw/find.png" alt="cari"></a>
                </div>
                    <div   id="377j5v51b"   class="head_right">
                <div   id="377j5v51b"   class="haed_language">
                    <a href="javascript:;" class="layui-btn haed_language_btn">Melayu<i class="layui-icon layui-icon-triangle-d"></i></a>
                    <div   class="377j5v51b"   id="dropdown-template" style="display: none;">
                        <div   id="377j5v51b"   class="languagechoose">
                                                    <a href="javascript:setlang('zh-cn');" title="簡(jiǎn)體中文" class="languagechoosea">簡(jiǎn)體中文</a>
                                                    <a href="javascript:setlang('en');" title="English" class="languagechoosea">English</a>
                                                    <a href="javascript:setlang('zh-tw');" title="繁體中文" class="languagechoosea">繁體中文</a>
                                                    <a href="javascript:setlang('ja');" title="日本語" class="languagechoosea">日本語</a>
                                                    <a href="javascript:setlang('ko');" title="???" class="languagechoosea">???</a>
                                                    <a href="javascript:;" title="Melayu" class="languagechoosea">Melayu</a>
                                                    <a href="javascript:setlang('fr');" title="Fran?ais" class="languagechoosea">Fran?ais</a>
                                                    <a href="javascript:setlang('de');" title="Deutsch" class="languagechoosea">Deutsch</a>
                                                </div>
                    </div>
                </div>
                <span id="377j5v51b"    class="head_right_line"></span>
                                <div style="display: block;" id="login" class="haed_login ">
                        <a href="javascript:;"  title="Login" class="haed_logina ">Login</a>
                    </div>
                    <div style="display: block;" id="reg" class="head_signup login">
                        <a href="javascript:;"  title="singup" class="head_signupa">singup</a>
                    </div>
                
            </div>
        </div>
    </header>
    
    	
    	<main>
    		<div   id="377j5v51b"   class="Article_Details_main">
    			<div   id="377j5v51b"   class="Article_Details_main1">
    							<div   id="377j5v51b"   class="Article_Details_main1M">
    					<div   id="377j5v51b"   class="phpgenera_Details_mainL1">
    						<a href="http://m.miracleart.cn/ms/" title="Rumah"
    							class="phpgenera_Details_mainL1a">Rumah</a>
    						<img src="/static/imghw/top_right.png" alt="" />
    												<a href="http://m.miracleart.cn/ms/weixin-marketing.html"
    							class="phpgenera_Details_mainL1a">applet WeChat</a>
    						<img src="/static/imghw/top_right.png" alt="" />
    												<a href="http://m.miracleart.cn/ms/weixin-kaifa.html"
    							class="phpgenera_Details_mainL1a">pembangunan WeChat</a>
    						<img src="/static/imghw/top_right.png" alt="" />
    						<span>Java微信支付之公眾號(hào)支付、掃碼支付實(shí)例</span>
    					</div>
    					
    					<div   id="377j5v51b"   class="Articlelist_txts">
    						<div   id="377j5v51b"   class="Articlelist_txts_info">
    							<h1 class="Articlelist_txts_title">Java微信支付之公眾號(hào)支付、掃碼支付實(shí)例</h1>
    							<div   id="377j5v51b"   class="Articlelist_txts_info_head">
    								<div   id="377j5v51b"   class="author_info">
    									<a href="http://m.miracleart.cn/ms/member/13.html"  class="author_avatar">
    									<img class="lazy"  data-src="https://img.php.cn/upload/avatar/000/000/013/6177b5643d1eb119.png" src="/static/imghw/default1.png" alt="高洛峰">
    									</a>
    									<div   id="377j5v51b"   class="author_detail">
    																			<a href="http://m.miracleart.cn/ms/member/13.html" class="author_name">高洛峰</a>
                                    										</div>
    								</div>
                    			</div>
    							<span id="377j5v51b"    class="Articlelist_txts_time">Feb 04, 2017 am	 11:30 AM</span>
    														
    						</div>
    					</div>
    					<hr />
    					<div   id="377j5v51b"   class="article_main php-article">
    						<div   id="377j5v51b"   class="article-list-left detail-content-wrap content">
    						<ins class="adsbygoogle"
    							style="display:block; text-align:center;"
    							data-ad-layout="in-article"
    							data-ad-format="fluid"
    							data-ad-client="ca-pub-5902227090019525"
    							data-ad-slot="3461856641">
    						</ins>
    						
    
    					<p>微信支付現(xiàn)在已經(jīng)變得越來越流行了,隨之也出現(xiàn)了很多以可以快速接入微信支付為噱頭的產(chǎn)品,不過方便之余也使得我們做東西慢慢依賴第三方,喪失了獨(dú)立思考的能力,這次打算分享下我之前開發(fā)過的微信支付。</p>
    <p>一 、H5公眾號(hào)支付</p>
    <p>要點(diǎn):正確獲取openId以及統(tǒng)一下單接口,正確處理支付結(jié)果通知,正確配置支付授權(quán)目錄</p>
    <p>H5的支付方式是使用較為廣泛的方式,這種支付方式主要用于微信內(nèi)自定義菜單的網(wǎng)頁,依賴手機(jī)上安裝的微信客戶端,高版本的微信才支持微信支付,下面按我的流程注意說明</p>
    <p>1? 編寫用于支付的頁面,由于是測(cè)試用就寫的簡(jiǎn)單了點(diǎn)</p><pre class='brush:php;toolbar:false;'><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 
    <% 
    String path = request.getContextPath(); 
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 
    %> 
      
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
    <html> 
     <head> 
     <base href="<%=basePath%>"> 
       
     <title>微信支付樣例</title> 
       
     <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0"> 
     <!-- 
     <link rel="stylesheet" type="text/css" href="styles.css"> 
     --> 
      
     </head> 
      
     <body> 
     <form action="oauthServlet" method="POST"> 
        訂單號(hào):<input type="text" name="orderNo" /> 
      <input type="submit" value="H5支付"/> 
     </form> 
     </br></br> 
      <form action="scanCodePayServlet?flag=createCode" method="POST"> 
        訂單號(hào):<input type="text" name="orderNo" /> 
      <input type="submit" value="掃碼支付"/> 
     </form> 
     </body> 
    </html></pre><p>2  編寫一個(gè)servlet用于通過Oauth獲取code</p><pre class='brush:php;toolbar:false;'>package com.debug.weixin.servlet; 
      
    import java.io.IOException; 
    import java.io.PrintWriter; 
      
    import javax.servlet.RequestDispatcher; 
    import javax.servlet.ServletException; 
    import javax.servlet.http.HttpServlet; 
    import javax.servlet.http.HttpServletRequest; 
    import javax.servlet.http.HttpServletResponse; 
      
    import com.debug.weixin.util.CommonUtil; 
    import com.debug.weixin.util.ServerConfig; 
      
    public class OauthServlet extends HttpServlet { 
      
       
     public void doGet(HttpServletRequest request, HttpServletResponse response) 
       throws ServletException, IOException { 
      
      this.doPost(request, response); 
     } 
      
     public void doPost(HttpServletRequest request, HttpServletResponse response) 
       throws ServletException, IOException { 
      
       String orderNo=request.getParameter("orderNo"); 
       //調(diào)用微信Oauth2.0獲取openid 
       String redirectURL=ServerConfig.SERVERDOMAIN+"/BasicWeixin/payServletForH5?orderNo="+orderNo; 
       String redirectURI=""; 
       try { 
        redirectURI=CommonUtil.initOpenId(redirectURL); 
       } catch (Exception e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
       } 
       //System.out.println(redirectURI); 
       //RequestDispatcher dis= request.getRequestDispatcher(redirectURI); 
       //dis.forward(request, response); 
       response.sendRedirect(redirectURI); 
     } 
      
    }</pre><p>3 獲取到code后,通過REDIRECTURI獲取openId,調(diào)用統(tǒng)一下單接口</p><pre class='brush:php;toolbar:false;'>package com.debug.weixin.servlet; 
      
    import java.io.IOException; 
    import java.io.PrintWriter; 
    import java.util.SortedMap; 
    import java.util.TreeMap; 
      
    import javax.servlet.RequestDispatcher; 
    import javax.servlet.ServletException; 
    import javax.servlet.http.HttpServlet; 
    import javax.servlet.http.HttpServletRequest; 
    import javax.servlet.http.HttpServletResponse; 
      
    import com.debug.weixin.pojo.WeixinOauth2Token; 
    import com.debug.weixin.pojo.WeixinQRCode; 
    import com.debug.weixin.util.AdvancedUtil; 
    import com.debug.weixin.util.CommonUtil; 
    import com.debug.weixin.util.ConfigUtil; 
    import com.debug.weixin.util.PayCommonUtil; 
      
    public class PayServletForH5 extends HttpServlet { 
      
       
     public void doGet(HttpServletRequest request, HttpServletResponse response) 
       throws ServletException, IOException { 
      
      this.doPost(request, response); 
     } 
      
     public void doPost(HttpServletRequest request, HttpServletResponse response) 
       throws ServletException, IOException { 
       String orderNo=request.getParameter("orderNo"); 
       String code=request.getParameter("code"); 
        
       //獲取AccessToken 
        
       WeixinOauth2Token token=AdvancedUtil.getOauth2AccessToken(ConfigUtil.APPID, ConfigUtil.APP_SECRECT, code); 
        
       String openId=token.getOpenId(); 
        
       //調(diào)用微信統(tǒng)一支付接口 
       SortedMap<Object, Object> parameters = new TreeMap<Object, Object>(); 
      parameters.put("appid", ConfigUtil.APPID); 
      
      parameters.put("mch_id", ConfigUtil.MCH_ID); 
      parameters.put("device_info", "1000"); 
      parameters.put("body", "我的測(cè)試訂單"); 
      parameters.put("nonce_str", PayCommonUtil.CreateNoncestr()); 
        
         
      parameters.put("out_trade_no", orderNo); 
      //parameters.put("total_fee", String.valueOf(total)); 
      parameters.put("total_fee", "1"); 
      parameters.put("spbill_create_ip", request.getRemoteAddr()); 
      parameters.put("notify_url", ConfigUtil.NOTIFY_URL); 
      parameters.put("trade_type", "JSAPI"); 
      parameters.put("openid", openId); 
      
      String sign = PayCommonUtil.createSign("UTF-8", parameters); 
      parameters.put("sign", sign); 
      
      String requestXML = PayCommonUtil.getRequestXml(parameters); 
      
      String result = CommonUtil.httpsRequestForStr(ConfigUtil.UNIFIED_ORDER_URL,"POST", requestXML); 
      System.out.println("----------------------------------"); 
      System.out.println(result); 
      System.out.println("----------------------------------"); 
        
      request.setAttribute("orderNo", orderNo); 
      request.setAttribute("totalPrice", "0.01"); 
      String payJSON=""; 
      try { 
       payJSON=CommonUtil.getH5PayStr(result,request); 
         
      } catch (Exception e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      //System.out.println(payJSON); 
      request.setAttribute("unifiedOrder",payJSON); 
        
      RequestDispatcher dis= request.getRequestDispatcher("h5Pay.jsp"); 
      dis.forward(request, response); 
     } 
      
    }</pre><p>調(diào)用微信統(tǒng)一下單接口,需要注意簽名算法,只有簽名計(jì)算正確才能順利支付</p><pre class='brush:php;toolbar:false;'>public static String getH5PayStr(String result,HttpServletRequest request) throws Exception{ 
        
       Map<String, String> map = XMLUtil.doXMLParse(result); 
         
         
        SortedMap<Object,Object> params = new TreeMap<Object,Object>(); 
       params.put("appId", ConfigUtil.APPID); 
       params.put("timeStamp", Long.toString(new Date().getTime())); 
       params.put("nonceStr", PayCommonUtil.CreateNoncestr()); 
       params.put("package", "prepay_id="+map.get("prepay_id")); 
       params.put("signType", ConfigUtil.SIGN_TYPE); 
       String paySign = PayCommonUtil.createSign("UTF-8", params); 
        
       params.put("paySign", paySign);  //paySign的生成規(guī)則和Sign的生成規(guī)則一致 
        
       String json = JSONObject.fromObject(params).toString(); 
        
       return json; 
     }</pre><p> 4 編寫最終的支付界面調(diào)起微信H5支付</p><pre class='brush:php;toolbar:false;'><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 
    <% 
    String path = request.getContextPath(); 
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 
    %> 
      
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
    <html> 
     <head> 
     <base href="<%=basePath%>"> 
       
     <title>微信H5支付</title> 
       
     <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0"> 
      <script type="text/javascript"> 
       
     function jsApiCall(){ 
      WeixinJSBridge.invoke( 
       &#39;getBrandWCPayRequest&#39;,<%=(String)request.getAttribute("unifiedOrder")%>, function(res){ 
        WeixinJSBridge.log(res.err_msg); 
        //alert(res.err_code+res.err_desc+res.err_msg); 
        if(res.err_msg == "get_brand_wcpay_request:ok" ) { 
         alert("恭喜你,支付成功!"); 
        }else{ 
         alert(res.err_code+res.err_desc+res.err_msg);     
        } 
       } 
      ); 
     } 
      
     function callpay(){ 
      if (typeof WeixinJSBridge == "undefined"){ 
       if( document.addEventListener ){ 
        document.addEventListener(&#39;WeixinJSBridgeReady&#39;, jsApiCall, false); 
       }else if (document.attachEvent){ 
        document.attachEvent(&#39;WeixinJSBridgeReady&#39;, jsApiCall); 
        document.attachEvent(&#39;onWeixinJSBridgeReady&#39;, jsApiCall); 
       } 
      }else{ 
       jsApiCall(); 
      } 
     } 
     </script> 
     </head> 
      
     <body> 
      <input type="button" value="支付" onclick="callpay()"/> 
     </body> 
    </html></pre><p>5 處理微信支付結(jié)果通知</p><pre class='brush:php;toolbar:false;'>package com.debug.weixin.servlet; 
      
    import java.io.ByteArrayOutputStream; 
    import java.io.IOException; 
    import java.io.InputStream; 
    import java.io.PrintWriter; 
    import java.util.Map; 
      
    import javax.servlet.ServletException; 
    import javax.servlet.http.HttpServlet; 
    import javax.servlet.http.HttpServletRequest; 
    import javax.servlet.http.HttpServletResponse; 
      
    import org.jdom.JDOMException; 
      
    import com.debug.weixin.util.PayCommonUtil; 
    import com.debug.weixin.util.XMLUtil; 
      
    public class PayHandlerServlet extends HttpServlet { 
      
       
     public void doGet(HttpServletRequest request, HttpServletResponse response) 
       throws ServletException, IOException { 
       this.doPost(request, response); 
     } 
      
       
     public void doPost(HttpServletRequest request, HttpServletResponse response) 
       throws ServletException, IOException { 
      
      InputStream inStream = request.getInputStream(); 
      ByteArrayOutputStream outSteam = new ByteArrayOutputStream(); 
      byte[] buffer = new byte[1024]; 
      int len = 0; 
      while ((len = inStream.read(buffer)) != -1) { 
       outSteam.write(buffer, 0, len); 
      } 
        
      outSteam.close(); 
      inStream.close(); 
      String result = new String(outSteam.toByteArray(),"utf-8");//獲取微信調(diào)用我們notify_url的返回信息 
      Map<Object, Object> map=null; 
      try { 
       map = XMLUtil.doXMLParse(result); 
      } catch (JDOMException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      for(Object keyValue : map.keySet()){ 
       System.out.println(keyValue+"="+map.get(keyValue)); 
      } 
      if (map.get("result_code").toString().equalsIgnoreCase("SUCCESS")) { 
         
       //對(duì)訂單進(jìn)行業(yè)務(wù)操作 
       System.out.println("-------------OK"); 
       response.getWriter().write(PayCommonUtil.setXML("SUCCESS", "")); //告訴微信服務(wù)器,我收到信息了,不要在調(diào)用回調(diào)action了 
         
      } 
     } 
      
    }</pre><p>對(duì)于上面的代碼,有很多都是參考http://blog.csdn.net/u011160656/article/details/41759195,因此這部分的代碼就不貼出來了,需要的話看這個(gè)博客就知道了。<br/></p><p>二  微信掃碼支付(模式一)</p><p>要點(diǎn):必須調(diào)用長(zhǎng)鏈接轉(zhuǎn)短鏈接接口、正確配置掃碼支付回調(diào)URL</p><p>1 根據(jù)訂單號(hào)生成微信支付二維碼</p><p>下面是幾個(gè)生成二維碼的方法:</p><pre class='brush:php;toolbar:false;'>package com.debug.weixin.util; 
    import com.google.zxing.common.BitMatrix; 
      
     import javax.imageio.ImageIO; 
     import java.io.File; 
     import java.io.OutputStream; 
     import java.io.IOException; 
     import java.awt.image.BufferedImage; 
      
      
     public final class MatrixToImageWriter { 
      
     private static final int BLACK = 0xFF000000; 
     private static final int WHITE = 0xFFFFFFFF; 
      
     private MatrixToImageWriter() {} 
      
       
     public static BufferedImage toBufferedImage(BitMatrix matrix) { 
      int width = matrix.getWidth(); 
      int height = matrix.getHeight(); 
      BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 
      for (int x = 0; x < width; x++) { 
      for (int y = 0; y < height; y++) { 
       image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE); 
      } 
      } 
      return image; 
     } 
      
       
     public static void writeToFile(BitMatrix matrix, String format, File file) 
      throws IOException { 
      BufferedImage image = toBufferedImage(matrix); 
      if (!ImageIO.write(image, format, file)) { 
      throw new IOException("Could not write an image of format " + format + " to " + file); 
      } 
     } 
      
       
     public static void writeToStream(BitMatrix matrix, String format, OutputStream stream) 
      throws IOException { 
      BufferedImage image = toBufferedImage(matrix); 
      if (!ImageIO.write(image, format, stream)) { 
      throw new IOException("Could not write an image of format " + format); 
      } 
     } 
      
     }</pre><p> 這個(gè)算是工具類,還有一個(gè)就是把二維碼顯示在界面上的方法,CreateQRCode主要用到代碼塊:</p><pre class='brush:php;toolbar:false;'>public static void createCodeStream(String text,HttpServletResponse response) throws Exception{ 
      
     // response.setContentType("image/jpeg"); 
     ServletOutputStream sos = response.getOutputStream(); 
     
     int width = 500; 
     int height = 500; 
     //二維碼的圖片格式 
     String format = "jpg"; 
     MultiFormatWriter multiFormatWriter = new MultiFormatWriter(); 
     Map hints = new HashMap(); 
     //內(nèi)容所使用編碼 
     hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); 
     BitMatrix bitMatrix = multiFormatWriter.encode(text, BarcodeFormat.QR_CODE, width, height, hints); 
      
      
     //生成二維碼 
      
     MatrixToImageWriter.writeToStream(bitMatrix, format,sos); 
      
     sos.close(); 
      
      
    }</pre><p>2 長(zhǎng)鏈接轉(zhuǎn)短鏈接生成二維碼,編寫掃碼支付回調(diào)方法并調(diào)用統(tǒng)一下單接口</p><pre class='brush:php;toolbar:false;'>package com.debug.weixin.servlet; 
      
    import java.io.ByteArrayOutputStream; 
    import java.io.IOException; 
    import java.io.InputStream; 
    import java.io.PrintWriter; 
    import java.util.Date; 
    import java.util.Map; 
    import java.util.SortedMap; 
    import java.util.TreeMap; 
      
    import javax.servlet.ServletException; 
    import javax.servlet.http.HttpServlet; 
    import javax.servlet.http.HttpServletRequest; 
    import javax.servlet.http.HttpServletResponse; 
      
    import org.jdom.JDOMException; 
      
    import com.debug.weixin.util.CommonUtil; 
    import com.debug.weixin.util.ConfigUtil; 
    import com.debug.weixin.util.CreateQRCode; 
    import com.debug.weixin.util.PayCommonUtil; 
    import com.debug.weixin.util.XMLUtil; 
    import com.mongodb.DBObject; 
      
    public class ScanCodePayServlet extends HttpServlet { 
      
       
     public void doGet(HttpServletRequest request, HttpServletResponse response) 
       throws ServletException, IOException { 
      this.doPost(request, response); 
        
     } 
      
       
     public void doPost(HttpServletRequest request, HttpServletResponse response) 
       throws ServletException, IOException { 
        
      String flag=request.getParameter("flag"); 
      if("createCode".equals(flag)){ 
       createPayCode(request,response); 
      }else{ 
       try { 
        wxScanCodeHandler(request,response); 
       } catch (Exception e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
        
        
     } 
       
     public void createPayCode(HttpServletRequest request,HttpServletResponse response){ 
        
      String orderNo=request.getParameter("orderNo"); 
        
      SortedMap<Object,Object> paras = new TreeMap<Object,Object>(); 
      paras.put("appid", ConfigUtil.APPID); 
      paras.put("mch_id", ConfigUtil.MCH_ID); 
      paras.put("time_stamp", Long.toString(new Date().getTime())); 
      paras.put("nonce_str", PayCommonUtil.CreateNoncestr()); 
      paras.put("product_id", orderNo);//商品號(hào)要唯一 
      String sign = PayCommonUtil.createSign("UTF-8", paras); 
      paras.put("sign", sign); 
        
      String url = "weixin://wxpay/bizpayurl?sign=SIGN&appid=APPID&mch_id=MCHID&product_id=PRODUCTID&time_stamp=TIMESTAMP&nonce_str=NOCESTR"; 
      String nativeUrl = url.replace("SIGN", sign).replace("APPID", ConfigUtil.APPID).replace("MCHID", ConfigUtil.MCH_ID).replace("PRODUCTID", (String)paras.get("product_id")).replace("TIMESTAMP", (String)paras.get("time_stamp")).replace("NOCESTR", (String)paras.get("nonce_str")); 
        
      
      
       SortedMap<Object,Object> parameters = new TreeMap<Object,Object>(); 
       parameters.put("appid", ConfigUtil.APPID); 
       parameters.put("mch_id", ConfigUtil.MCH_ID); 
       parameters.put("nonce_str", PayCommonUtil.CreateNoncestr()); 
       parameters.put("long_url", CommonUtil.urlEncodeUTF8(nativeUrl)); 
       String sign2 = PayCommonUtil.createSign("UTF-8", parameters); 
       parameters.put("sign", sign2); 
       String requestXML = PayCommonUtil.getRequestXml(parameters); 
       String result =CommonUtil.httpsRequestForStr(ConfigUtil.SHORT_URL, "POST", requestXML); 
        
       Map<String, String> map=null; 
      try { 
       map = XMLUtil.doXMLParse(result); 
      } catch (JDOMException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
       String returnCode = map.get("return_code"); 
       String resultCode = map.get("result_code"); 
        
       if(returnCode.equalsIgnoreCase("SUCCESS")&&resultCode.equalsIgnoreCase("SUCCESS")){ 
         
        String shortUrl = map.get("short_url"); 
        //TODO 拿到shortUrl,寫代碼生成二維碼 
        System.out.println("shortUrl="+shortUrl); 
        try { 
        CreateQRCode.createCodeStream(shortUrl,response); 
        } catch (Exception e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
        } 
      } 
     } 
       
       
     public void wxScanCodeHandler(HttpServletRequest request,HttpServletResponse response) throws Exception { 
      InputStream inStream = request.getInputStream(); 
      ByteArrayOutputStream outSteam = new ByteArrayOutputStream(); 
      byte[] buffer = new byte[1024]; 
      int len = 0; 
      while ((len = inStream.read(buffer)) != -1) { 
       outSteam.write(buffer, 0, len); 
      } 
        
      outSteam.close(); 
      inStream.close(); 
      String result = new String(outSteam.toByteArray(),"utf-8");//獲取微信調(diào)用我們notify_url的返回信息 
      Map<Object, Object> map=null; 
      try { 
       map = XMLUtil.doXMLParse(result); 
      } catch (JDOMException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      for(Object keyValue : map.keySet()){ 
       System.out.println(keyValue+"="+map.get(keyValue)); 
      } 
      String orderNo=map.get("product_id").toString(); 
        
      //接收到請(qǐng)求參數(shù)后調(diào)用統(tǒng)一下單接口 
      SortedMap<Object, Object> parameters = new TreeMap<Object, Object>(); 
      parameters.put("appid", ConfigUtil.APPID); 
      
      parameters.put("mch_id", ConfigUtil.MCH_ID); 
      parameters.put("device_info", "1000"); 
      parameters.put("body", "測(cè)試掃碼支付訂單"); 
      parameters.put("nonce_str", PayCommonUtil.CreateNoncestr()); 
        
         
      parameters.put("out_trade_no", map.get("product_id")); 
      //parameters.put("total_fee", String.valueOf(totalPrice)); 
      parameters.put("total_fee", "1"); 
      parameters.put("spbill_create_ip", request.getRemoteAddr()); 
      parameters.put("notify_url", ConfigUtil.NOTIFY_URL); 
      parameters.put("trade_type", "NATIVE"); 
      parameters.put("openid", map.get("openid")); 
      
      String sign = PayCommonUtil.createSign("UTF-8", parameters); 
       
      parameters.put("sign", sign); 
      
      String requestXML = PayCommonUtil.getRequestXml(parameters); 
      
      String result2 = CommonUtil.httpsRequestForStr(ConfigUtil.UNIFIED_ORDER_URL,"POST", requestXML); 
        
      System.out.println("-----------------------------統(tǒng)一下單結(jié)果---------------------------"); 
      System.out.println(result2); 
      Map<String, String> mm=null; 
      try { 
       mm=getH5PayMap(result2,request); 
      } catch (Exception e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      //String prepayId=getPrepayId(result2,request); 
      //String returnNoneStr=getReturnNoneStr(result2,request); 
      String prepayId=mm.get("prepay_id"); 
      String returnNoneStr=mm.get("nonce_str");; 
      SortedMap<Object, Object> lastSign = new TreeMap<Object, Object>(); 
      lastSign.put("return_code", "SUCCESS"); 
      lastSign.put("appid", ConfigUtil.APPID); 
      lastSign.put("mch_id", ConfigUtil.MCH_ID); 
      lastSign.put("nonce_str", returnNoneStr); 
      lastSign.put("prepay_id", prepayId); 
      lastSign.put("result_code", "SUCCESS"); 
      lastSign.put("key", ConfigUtil.API_KEY); 
        
        
      String lastSignpara = PayCommonUtil.createSign("UTF-8", lastSign); 
        
        
      StringBuffer buf=new StringBuffer(); 
      buf.append("<xml>"); 
      buf.append("<return_code>SUCCESS</return_code>"); 
      buf.append("<appid>"+ConfigUtil.APPID+"</appid>"); 
      buf.append("<mch_id>"+ConfigUtil.MCH_ID+"</mch_id>"); 
      buf.append("<nonce_str>"+returnNoneStr+"</nonce_str>"); 
      buf.append("<prepay_id>"+prepayId+"</prepay_id>"); 
      buf.append("<result_code>SUCCESS</result_code>"); 
      buf.append("<sign>"+lastSignpara+"</sign>"); 
      buf.append("</xml>"); 
        
      response.getWriter().print(buf.toString()); 
     } 
       
     public Map<String, String> getH5PayMap(String result,HttpServletRequest request) throws Exception{ 
        
       Map<String, String> map = XMLUtil.doXMLParse(result); 
       return map; 
     } 
      
    }</pre><p>最終看下公眾號(hào)支付和掃碼支付的微信配置:</p>
    <p><img src="/static/imghw/default1.png" data-src="https://img.php.cn//upload/image/142/467/410/1486178956477450.png" class="lazy" title="Java微信支付之公眾號(hào)支付、掃碼支付實(shí)例" alt="Java微信支付之公眾號(hào)支付、掃碼支付實(shí)例"    style="max-width:90%"  style="max-width:90%"><img src="/static/imghw/default1.png" data-src="https://img.php.cn//upload/image/788/523/117/1486178971761754.png" class="lazy" title="Java微信支付之公眾號(hào)支付、掃碼支付實(shí)例" alt="Java微信支付之公眾號(hào)支付、掃碼支付實(shí)例"    style="max-width:90%"  style="max-width:90%"></p>
    <p>希望通過這篇文章,大家能明白就算通過Java來做微信公眾號(hào)、微信支付而不借助github提供的那些坑人的代碼也可以開發(fā)出另自己和客戶滿意的微信應(yīng)用。雖然微信給出的demo都是PHP的,但這些都是浮云,開發(fā)語言是其次,理解接口調(diào)用需具備的底層只是才是程序員的必修課。</p>
    <p>更多Java微信支付之公眾號(hào)支付、掃碼支付實(shí)例相關(guān)文章請(qǐng)關(guān)注PHP中文網(wǎng)!</p>
    
    
    						</div>
    					</div>
    					<div   id="377j5v51b"   class="wzconShengming_sp">
    						<div   id="377j5v51b"   class="bzsmdiv_sp">Kenyataan Laman Web ini</div>
    						<div>Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn</div>
    					</div>
    				</div>
    
    				<ins class="adsbygoogle"
         style="display:block"
         data-ad-format="autorelaxed"
         data-ad-client="ca-pub-5902227090019525"
         data-ad-slot="2507867629"></ins>
    
    
    
    				<div   id="377j5v51b"   class="AI_ToolDetails_main4sR">
    
    
    				<ins class="adsbygoogle"
            style="display:block"
            data-ad-client="ca-pub-5902227090019525"
            data-ad-slot="3653428331"
            data-ad-format="auto"
            data-full-width-responsive="true"></ins>
        
    
    
    					<!-- <div   id="377j5v51b"   class="phpgenera_Details_mainR4">
    						<div   id="377j5v51b"   class="phpmain1_4R_readrank">
    							<div   id="377j5v51b"   class="phpmain1_4R_readrank_top">
    								<img onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
    									onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
    									src="/static/imghw/hotarticle2.png" alt="" />
    								<h2>Artikel Panas</h2>
    							</div>
    							<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottom">
    															<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms">
    									<a href="http://m.miracleart.cn/ms/faq/1796832397.html" title="Panduan Membina Rumput Wonder | Uma Musume Pretty Derby" class="phpgenera_Details_mainR4_bottom_title">Panduan Membina Rumput Wonder | Uma Musume Pretty Derby</a>
    									<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_info">
    										<span>1 bulan yang lalu</span>
    										<span>By Jack chen</span>
    									</div>
    								</div>
    															<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms">
    									<a href="http://m.miracleart.cn/ms/faq/1796833110.html" title="<??>: 99 Malam di Hutan - Semua Lencana Dan Cara Membuka Kunci Mereka" class="phpgenera_Details_mainR4_bottom_title"><??>: 99 Malam di Hutan - Semua Lencana Dan Cara Membuka Kunci Mereka</a>
    									<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_info">
    										<span>1 bulan yang lalu</span>
    										<span>By DDD</span>
    									</div>
    								</div>
    															<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms">
    									<a href="http://m.miracleart.cn/ms/faq/1796836699.html" title="Panduan Suhu Rimworld Odyssey untuk Kapal dan Gravtech" class="phpgenera_Details_mainR4_bottom_title">Panduan Suhu Rimworld Odyssey untuk Kapal dan Gravtech</a>
    									<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_info">
    										<span>3 minggu yang lalu</span>
    										<span>By Jack chen</span>
    									</div>
    								</div>
    															<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms">
    									<a href="http://m.miracleart.cn/ms/faq/1796834553.html" title="Mejiro Ryan Build Guide | Uma Musume Pretty Derby" class="phpgenera_Details_mainR4_bottom_title">Mejiro Ryan Build Guide | Uma Musume Pretty Derby</a>
    									<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_info">
    										<span>4 minggu yang lalu</span>
    										<span>By Jack chen</span>
    									</div>
    								</div>
    															<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms">
    									<a href="http://m.miracleart.cn/ms/faq/1796836084.html" title="Rimworld Odyssey Cara Ikan" class="phpgenera_Details_mainR4_bottom_title">Rimworld Odyssey Cara Ikan</a>
    									<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_info">
    										<span>3 minggu yang lalu</span>
    										<span>By Jack chen</span>
    									</div>
    								</div>
    														</div>
    							<div   id="377j5v51b"   class="phpgenera_Details_mainR3_more">
    								<a href="http://m.miracleart.cn/ms/article.html">Tunjukkan Lagi</a>
    							</div>
    						</div>
    					</div> -->
    
    
    											<div   id="377j5v51b"   class="phpgenera_Details_mainR3">
    							<div   id="377j5v51b"   class="phpmain1_4R_readrank">
    								<div   id="377j5v51b"   class="phpmain1_4R_readrank_top">
    									<img onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
    										onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
    										src="/static/imghw/hottools2.png" alt="" />
    									<h2>Alat AI Hot</h2>
    								</div>
    								<div   id="377j5v51b"   class="phpgenera_Details_mainR3_bottom">
    																		<div   id="377j5v51b"   class="phpmain_tab2_mids_top">
    											<a href="http://m.miracleart.cn/ms/ai/undress-ai-tool" title="Undress AI Tool" class="phpmain_tab2_mids_top_img">
    												<img onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
    													onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
    													class="lazy"  data-src="https://img.php.cn/upload/ai_manual/001/246/273/173410641626608.jpg?x-oss-process=image/resize,m_fill,h_50,w_50" src="/static/imghw/default1.png" alt="Undress AI Tool" />
    											</a>
    											<div   id="377j5v51b"   class="phpmain_tab2_mids_info">
    												<a href="http://m.miracleart.cn/ms/ai/undress-ai-tool" title="Undress AI Tool" class="phpmain_tab2_mids_title">
    													<h3>Undress AI Tool</h3>
    												</a>
    												<p>Gambar buka pakaian secara percuma</p>
    											</div>
    										</div>
    																		<div   id="377j5v51b"   class="phpmain_tab2_mids_top">
    											<a href="http://m.miracleart.cn/ms/ai/undresserai-undress" title="Undresser.AI Undress" class="phpmain_tab2_mids_top_img">
    												<img onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
    													onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
    													class="lazy"  data-src="https://img.php.cn/upload/ai_manual/001/246/273/173411540686492.jpg?x-oss-process=image/resize,m_fill,h_50,w_50" src="/static/imghw/default1.png" alt="Undresser.AI Undress" />
    											</a>
    											<div   id="377j5v51b"   class="phpmain_tab2_mids_info">
    												<a href="http://m.miracleart.cn/ms/ai/undresserai-undress" title="Undresser.AI Undress" class="phpmain_tab2_mids_title">
    													<h3>Undresser.AI Undress</h3>
    												</a>
    												<p>Apl berkuasa AI untuk mencipta foto bogel yang realistik</p>
    											</div>
    										</div>
    																		<div   id="377j5v51b"   class="phpmain_tab2_mids_top">
    											<a href="http://m.miracleart.cn/ms/ai/ai-clothes-remover" title="AI Clothes Remover" class="phpmain_tab2_mids_top_img">
    												<img onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
    													onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
    													class="lazy"  data-src="https://img.php.cn/upload/ai_manual/001/246/273/173411552797167.jpg?x-oss-process=image/resize,m_fill,h_50,w_50" src="/static/imghw/default1.png" alt="AI Clothes Remover" />
    											</a>
    											<div   id="377j5v51b"   class="phpmain_tab2_mids_info">
    												<a href="http://m.miracleart.cn/ms/ai/ai-clothes-remover" title="AI Clothes Remover" class="phpmain_tab2_mids_title">
    													<h3>AI Clothes Remover</h3>
    												</a>
    												<p>Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.</p>
    											</div>
    										</div>
    																		<div   id="377j5v51b"   class="phpmain_tab2_mids_top">
    											<a href="http://m.miracleart.cn/ms/ai/clothoffio" title="Clothoff.io" class="phpmain_tab2_mids_top_img">
    												<img onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
    													onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
    													class="lazy"  data-src="https://img.php.cn/upload/ai_manual/001/246/273/173411529149311.jpg?x-oss-process=image/resize,m_fill,h_50,w_50" src="/static/imghw/default1.png" alt="Clothoff.io" />
    											</a>
    											<div   id="377j5v51b"   class="phpmain_tab2_mids_info">
    												<a href="http://m.miracleart.cn/ms/ai/clothoffio" title="Clothoff.io" class="phpmain_tab2_mids_title">
    													<h3>Clothoff.io</h3>
    												</a>
    												<p>Penyingkiran pakaian AI</p>
    											</div>
    										</div>
    																		<div   id="377j5v51b"   class="phpmain_tab2_mids_top">
    											<a href="http://m.miracleart.cn/ms/ai/video-swap" title="Video Face Swap" class="phpmain_tab2_mids_top_img">
    												<img onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
    													onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
    													class="lazy"  data-src="https://img.php.cn/upload/ai_manual/001/246/273/173414504068133.jpg?x-oss-process=image/resize,m_fill,h_50,w_50" src="/static/imghw/default1.png" alt="Video Face Swap" />
    											</a>
    											<div   id="377j5v51b"   class="phpmain_tab2_mids_info">
    												<a href="http://m.miracleart.cn/ms/ai/video-swap" title="Video Face Swap" class="phpmain_tab2_mids_title">
    													<h3>Video Face Swap</h3>
    												</a>
    												<p>Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!</p>
    											</div>
    										</div>
    																</div>
    								<div   id="377j5v51b"   class="phpgenera_Details_mainR3_more">
    									<a href="http://m.miracleart.cn/ms/ai">Tunjukkan Lagi</a>
    								</div>
    							</div>
    						</div>
    					
    
    
    					<div   id="377j5v51b"   class="phpgenera_Details_mainR4">
    						<div   id="377j5v51b"   class="phpmain1_4R_readrank">
    							<div   id="377j5v51b"   class="phpmain1_4R_readrank_top">
    								<img onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
    									onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
    									src="/static/imghw/hotarticle2.png" alt="" />
    								<h2>Artikel Panas</h2>
    							</div>
    							<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottom">
    															<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms">
    									<a href="http://m.miracleart.cn/ms/faq/1796832397.html" title="Panduan Membina Rumput Wonder | Uma Musume Pretty Derby" class="phpgenera_Details_mainR4_bottom_title">Panduan Membina Rumput Wonder | Uma Musume Pretty Derby</a>
    									<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_info">
    										<span>1 bulan yang lalu</span>
    										<span>By Jack chen</span>
    									</div>
    								</div>
    															<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms">
    									<a href="http://m.miracleart.cn/ms/faq/1796833110.html" title="<??>: 99 Malam di Hutan - Semua Lencana Dan Cara Membuka Kunci Mereka" class="phpgenera_Details_mainR4_bottom_title"><??>: 99 Malam di Hutan - Semua Lencana Dan Cara Membuka Kunci Mereka</a>
    									<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_info">
    										<span>1 bulan yang lalu</span>
    										<span>By DDD</span>
    									</div>
    								</div>
    															<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms">
    									<a href="http://m.miracleart.cn/ms/faq/1796836699.html" title="Panduan Suhu Rimworld Odyssey untuk Kapal dan Gravtech" class="phpgenera_Details_mainR4_bottom_title">Panduan Suhu Rimworld Odyssey untuk Kapal dan Gravtech</a>
    									<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_info">
    										<span>3 minggu yang lalu</span>
    										<span>By Jack chen</span>
    									</div>
    								</div>
    															<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms">
    									<a href="http://m.miracleart.cn/ms/faq/1796834553.html" title="Mejiro Ryan Build Guide | Uma Musume Pretty Derby" class="phpgenera_Details_mainR4_bottom_title">Mejiro Ryan Build Guide | Uma Musume Pretty Derby</a>
    									<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_info">
    										<span>4 minggu yang lalu</span>
    										<span>By Jack chen</span>
    									</div>
    								</div>
    															<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms">
    									<a href="http://m.miracleart.cn/ms/faq/1796836084.html" title="Rimworld Odyssey Cara Ikan" class="phpgenera_Details_mainR4_bottom_title">Rimworld Odyssey Cara Ikan</a>
    									<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_info">
    										<span>3 minggu yang lalu</span>
    										<span>By Jack chen</span>
    									</div>
    								</div>
    														</div>
    							<div   id="377j5v51b"   class="phpgenera_Details_mainR3_more">
    								<a href="http://m.miracleart.cn/ms/article.html">Tunjukkan Lagi</a>
    							</div>
    						</div>
    					</div>
    
    
    											<div   id="377j5v51b"   class="phpgenera_Details_mainR3">
    							<div   id="377j5v51b"   class="phpmain1_4R_readrank">
    								<div   id="377j5v51b"   class="phpmain1_4R_readrank_top">
    									<img onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
    										onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
    										src="/static/imghw/hottools2.png" alt="" />
    									<h2>Alat panas</h2>
    								</div>
    								<div   id="377j5v51b"   class="phpgenera_Details_mainR3_bottom">
    																		<div   id="377j5v51b"   class="phpmain_tab2_mids_top">
    											<a href="http://m.miracleart.cn/ms/toolset/development-tools/92" title="Notepad++7.3.1" class="phpmain_tab2_mids_top_img">
    												<img onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
    													onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
    													class="lazy"  data-src="https://img.php.cn/upload/manual/000/000/001/58ab96f0f39f7357.jpg?x-oss-process=image/resize,m_fill,h_50,w_72" src="/static/imghw/default1.png" alt="Notepad++7.3.1" />
    											</a>
    											<div   id="377j5v51b"   class="phpmain_tab2_mids_info">
    												<a href="http://m.miracleart.cn/ms/toolset/development-tools/92" title="Notepad++7.3.1" class="phpmain_tab2_mids_title">
    													<h3>Notepad++7.3.1</h3>
    												</a>
    												<p>Editor kod yang mudah digunakan dan percuma</p>
    											</div>
    										</div>
    																			<div   id="377j5v51b"   class="phpmain_tab2_mids_top">
    											<a href="http://m.miracleart.cn/ms/toolset/development-tools/93" title="SublimeText3 versi Cina" class="phpmain_tab2_mids_top_img">
    												<img onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
    													onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
    													class="lazy"  data-src="https://img.php.cn/upload/manual/000/000/001/58ab97a3baad9677.jpg?x-oss-process=image/resize,m_fill,h_50,w_72" src="/static/imghw/default1.png" alt="SublimeText3 versi Cina" />
    											</a>
    											<div   id="377j5v51b"   class="phpmain_tab2_mids_info">
    												<a href="http://m.miracleart.cn/ms/toolset/development-tools/93" title="SublimeText3 versi Cina" class="phpmain_tab2_mids_title">
    													<h3>SublimeText3 versi Cina</h3>
    												</a>
    												<p>Versi Cina, sangat mudah digunakan</p>
    											</div>
    										</div>
    																			<div   id="377j5v51b"   class="phpmain_tab2_mids_top">
    											<a href="http://m.miracleart.cn/ms/toolset/development-tools/121" title="Hantar Studio 13.0.1" class="phpmain_tab2_mids_top_img">
    												<img onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
    													onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
    													class="lazy"  data-src="https://img.php.cn/upload/manual/000/000/001/58ab97ecd1ab2670.jpg?x-oss-process=image/resize,m_fill,h_50,w_72" src="/static/imghw/default1.png" alt="Hantar Studio 13.0.1" />
    											</a>
    											<div   id="377j5v51b"   class="phpmain_tab2_mids_info">
    												<a href="http://m.miracleart.cn/ms/toolset/development-tools/121" title="Hantar Studio 13.0.1" class="phpmain_tab2_mids_title">
    													<h3>Hantar Studio 13.0.1</h3>
    												</a>
    												<p>Persekitaran pembangunan bersepadu PHP yang berkuasa</p>
    											</div>
    										</div>
    																			<div   id="377j5v51b"   class="phpmain_tab2_mids_top">
    											<a href="http://m.miracleart.cn/ms/toolset/development-tools/469" title="Dreamweaver CS6" class="phpmain_tab2_mids_top_img">
    												<img onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
    													onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
    													class="lazy"  data-src="https://img.php.cn/upload/manual/000/000/001/58d0e0fc74683535.jpg?x-oss-process=image/resize,m_fill,h_50,w_72" src="/static/imghw/default1.png" alt="Dreamweaver CS6" />
    											</a>
    											<div   id="377j5v51b"   class="phpmain_tab2_mids_info">
    												<a href="http://m.miracleart.cn/ms/toolset/development-tools/469" title="Dreamweaver CS6" class="phpmain_tab2_mids_title">
    													<h3>Dreamweaver CS6</h3>
    												</a>
    												<p>Alat pembangunan web visual</p>
    											</div>
    										</div>
    																			<div   id="377j5v51b"   class="phpmain_tab2_mids_top">
    											<a href="http://m.miracleart.cn/ms/toolset/development-tools/500" title="SublimeText3 versi Mac" class="phpmain_tab2_mids_top_img">
    												<img onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
    													onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
    													class="lazy"  data-src="https://img.php.cn/upload/manual/000/000/001/58d34035e2757995.png?x-oss-process=image/resize,m_fill,h_50,w_72" src="/static/imghw/default1.png" alt="SublimeText3 versi Mac" />
    											</a>
    											<div   id="377j5v51b"   class="phpmain_tab2_mids_info">
    												<a href="http://m.miracleart.cn/ms/toolset/development-tools/500" title="SublimeText3 versi Mac" class="phpmain_tab2_mids_title">
    													<h3>SublimeText3 versi Mac</h3>
    												</a>
    												<p>Perisian penyuntingan kod peringkat Tuhan (SublimeText3)</p>
    											</div>
    										</div>
    																	</div>
    								<div   id="377j5v51b"   class="phpgenera_Details_mainR3_more">
    									<a href="http://m.miracleart.cn/ms/ai">Tunjukkan Lagi</a>
    								</div>
    							</div>
    						</div>
    										
    
    					
    					<div   id="377j5v51b"   class="phpgenera_Details_mainR4">
    						<div   id="377j5v51b"   class="phpmain1_4R_readrank">
    							<div   id="377j5v51b"   class="phpmain1_4R_readrank_top">
    								<img onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
    									onerror="this.onerror=''; this.src='/static/imghw/default1.png'"
    									src="/static/imghw/hotarticle2.png" alt="" />
    								<h2>Topik panas</h2>
    							</div>
    							<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottom">
    															<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms">
    									<a href="http://m.miracleart.cn/ms/faq/laravel-tutori" title="Tutorial Laravel" class="phpgenera_Details_mainR4_bottom_title">Tutorial Laravel</a>
    									<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_info">
    										<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_infos">
    											<img src="/static/imghw/eyess.png" alt="" />
    											<span>1601</span>
    										</div>
    										<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_infos">
    											<img src="/static/imghw/tiezi.png" alt="" />
    											<span>29</span>
    										</div>
    									</div>
    								</div>
    															<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms">
    									<a href="http://m.miracleart.cn/ms/faq/php-tutorial" title="Tutorial PHP" class="phpgenera_Details_mainR4_bottom_title">Tutorial PHP</a>
    									<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_info">
    										<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_infos">
    											<img src="/static/imghw/eyess.png" alt="" />
    											<span>1502</span>
    										</div>
    										<div   id="377j5v51b"   class="phpgenera_Details_mainR4_bottoms_infos">
    											<img src="/static/imghw/tiezi.png" alt="" />
    											<span>276</span>
    										</div>
    									</div>
    								</div>
    														</div>
    							<div   id="377j5v51b"   class="phpgenera_Details_mainR3_more">
    								<a href="http://m.miracleart.cn/ms/faq/zt">Tunjukkan Lagi</a>
    							</div>
    						</div>
    					</div>
    				</div>
    			</div>
    					</div>
    	</main>
    	<footer>
        <div   id="377j5v51b"   class="footer">
            <div   id="377j5v51b"   class="footertop">
                <img src="/static/imghw/logo.png" alt="">
                <p>Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!</p>
            </div>
            <div   id="377j5v51b"   class="footermid">
                <a href="http://m.miracleart.cn/ms/about/us.html">Tentang kita</a>
                <a href="http://m.miracleart.cn/ms/about/disclaimer.html">Penafian</a>
                <a href="http://m.miracleart.cn/ms/update/article_0_1.html">Sitemap</a>
            </div>
            <div   id="377j5v51b"   class="footerbottom">
                <p>
                    ? php.cn All rights reserved
                </p>
            </div>
        </div>
    </footer>
    
    <input type="hidden" id="verifycode" value="/captcha.html">
    
    
    
    
    		<link rel='stylesheet' id='_main-css' href='/static/css/viewer.min.css?2' type='text/css' media='all' />
    	
    	
    	
    	
    	
    
    	
    	
    
    
    
    
    
    
    <footer>
    <div class="friendship-link">
    <p>感谢您访问我们的网站,您可能还对以下资源感兴趣:</p>
    <a href="http://m.miracleart.cn/" title="国产av日韩一区二区三区精品">国产av日韩一区二区三区精品</a>
    
    <div class="friend-links">
    
    
    </div>
    </div>
    
    </footer>
    
    
    <script>
    (function(){
        var bp = document.createElement('script');
        var curProtocol = window.location.protocol.split(':')[0];
        if (curProtocol === 'https') {
            bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
        }
        else {
            bp.src = 'http://push.zhanzhang.baidu.com/push.js';
        }
        var s = document.getElementsByTagName("script")[0];
        s.parentNode.insertBefore(bp, s);
    })();
    </script>
    </body><div id="aw0ai" class="pl_css_ganrao" style="display: none;"><dfn id="aw0ai"></dfn><fieldset id="aw0ai"><acronym id="aw0ai"><object id="aw0ai"></object></acronym></fieldset><menu id="aw0ai"><tbody id="aw0ai"><small id="aw0ai"></small></tbody></menu><tfoot id="aw0ai"><del id="aw0ai"><abbr id="aw0ai"></abbr></del></tfoot><ul id="aw0ai"></ul><noframes id="aw0ai"></noframes><abbr id="aw0ai"><wbr id="aw0ai"><pre id="aw0ai"></pre></wbr></abbr><tr id="aw0ai"></tr><nav id="aw0ai"></nav><strong id="aw0ai"></strong><samp id="aw0ai"><table id="aw0ai"><dfn id="aw0ai"></dfn></table></samp><ul id="aw0ai"></ul><dfn id="aw0ai"></dfn><optgroup id="aw0ai"></optgroup><acronym id="aw0ai"></acronym><samp id="aw0ai"><kbd id="aw0ai"><cite id="aw0ai"></cite></kbd></samp><tbody id="aw0ai"><wbr id="aw0ai"><sup id="aw0ai"></sup></wbr></tbody><rt id="aw0ai"><wbr id="aw0ai"><abbr id="aw0ai"></abbr></wbr></rt><object id="aw0ai"></object><nav id="aw0ai"><tfoot id="aw0ai"><em id="aw0ai"></em></tfoot></nav><code id="aw0ai"></code><small id="aw0ai"></small><small id="aw0ai"></small><tfoot id="aw0ai"></tfoot><kbd id="aw0ai"></kbd><s id="aw0ai"><td id="aw0ai"><table id="aw0ai"></table></td></s><dfn id="aw0ai"><table id="aw0ai"><nav id="aw0ai"></nav></table></dfn><strike id="aw0ai"><ul id="aw0ai"><strong id="aw0ai"></strong></ul></strike><strike id="aw0ai"></strike><tr id="aw0ai"><fieldset id="aw0ai"><tfoot id="aw0ai"></tfoot></fieldset></tr><small id="aw0ai"></small><tbody id="aw0ai"></tbody><strike id="aw0ai"></strike><wbr id="aw0ai"></wbr><center id="aw0ai"><pre id="aw0ai"><s id="aw0ai"></s></pre></center><option id="aw0ai"></option><menu id="aw0ai"></menu><strong id="aw0ai"><center id="aw0ai"><optgroup id="aw0ai"></optgroup></center></strong><ul id="aw0ai"><menu id="aw0ai"><xmp id="aw0ai"></xmp></menu></ul><em id="aw0ai"></em><optgroup id="aw0ai"><dfn id="aw0ai"><button id="aw0ai"></button></dfn></optgroup><button id="aw0ai"><th id="aw0ai"><tr id="aw0ai"></tr></th></button><dl id="aw0ai"><pre id="aw0ai"><bdo id="aw0ai"></bdo></pre></dl><rt id="aw0ai"><center id="aw0ai"><nav id="aw0ai"></nav></center></rt><source id="aw0ai"><dfn id="aw0ai"><button id="aw0ai"></button></dfn></source><tbody id="aw0ai"></tbody><xmp id="aw0ai"><noframes id="aw0ai"><fieldset id="aw0ai"></fieldset></noframes></xmp><dl id="aw0ai"></dl><dfn id="aw0ai"><li id="aw0ai"><tbody id="aw0ai"></tbody></li></dfn><object id="aw0ai"></object><acronym id="aw0ai"><small id="aw0ai"><dfn id="aw0ai"></dfn></small></acronym><code id="aw0ai"><wbr id="aw0ai"><abbr id="aw0ai"></abbr></wbr></code><td id="aw0ai"><button id="aw0ai"><object id="aw0ai"></object></button></td><th id="aw0ai"></th><rt id="aw0ai"></rt><pre id="aw0ai"></pre><nav id="aw0ai"></nav><blockquote id="aw0ai"></blockquote><blockquote id="aw0ai"><tbody id="aw0ai"><wbr id="aw0ai"></wbr></tbody></blockquote><menu id="aw0ai"></menu><blockquote id="aw0ai"></blockquote><menu id="aw0ai"></menu><code id="aw0ai"></code><tfoot id="aw0ai"><em id="aw0ai"><rt id="aw0ai"></rt></em></tfoot><bdo id="aw0ai"></bdo><acronym id="aw0ai"><small id="aw0ai"><source id="aw0ai"></source></small></acronym><strike id="aw0ai"></strike><th id="aw0ai"><li id="aw0ai"><th id="aw0ai"></th></li></th><del id="aw0ai"></del><menu id="aw0ai"><tbody id="aw0ai"><noframes id="aw0ai"></noframes></tbody></menu><dd id="aw0ai"></dd><li id="aw0ai"></li><acronym id="aw0ai"></acronym><acronym id="aw0ai"></acronym><s id="aw0ai"></s><nav id="aw0ai"><dd id="aw0ai"><nav id="aw0ai"></nav></dd></nav><tr id="aw0ai"></tr><tfoot id="aw0ai"></tfoot><samp id="aw0ai"></samp><tr id="aw0ai"></tr><blockquote id="aw0ai"></blockquote><menu id="aw0ai"></menu><s id="aw0ai"></s><rt id="aw0ai"></rt><acronym id="aw0ai"></acronym><tr id="aw0ai"></tr><td id="aw0ai"></td><pre id="aw0ai"></pre><fieldset id="aw0ai"></fieldset><td id="aw0ai"></td><dfn id="aw0ai"></dfn><noframes id="aw0ai"><source id="aw0ai"><pre id="aw0ai"></pre></source></noframes><abbr id="aw0ai"><wbr id="aw0ai"><pre id="aw0ai"></pre></wbr></abbr><blockquote id="aw0ai"></blockquote><em id="aw0ai"><optgroup id="aw0ai"><center id="aw0ai"></center></optgroup></em><td id="aw0ai"></td><abbr id="aw0ai"><s id="aw0ai"><tbody id="aw0ai"></tbody></s></abbr><pre id="aw0ai"></pre><del id="aw0ai"></del></div>
    
    </html>