第一步java
要掃碼,必需要先有碼。生成二維碼demoapi
String url = "weixin://wxpay/bizpayurl?sign="+er.getSign()+"&appid="+er.getAppid()+ "&mch_id="+er.getMch_id()+"&product_id="+er.getProduct_id()+"&time_stamp="+er.getTime_stamp()+"&nonce_str="+er.getNonce_str();
第二步微信
設置掃碼後微信通知你的URLapp
第三步dom
建立編寫回調URL servletide
package com.yuwei.nativepay.servlet; import java.io.IOException; import java.io.PrintWriter; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.yuwei.nativepay.main.UnifiedOrderBean; import com.yuwei.nativepay.sign.Signature; import com.yuwei.nativepay.sign.XMLParser; import com.yuwei.nativepay.util.Configure; import com.yuwei.nativepay.util.HttpRequest; import com.yuwei.nativepay.util.RequestUtil; import com.yuwei.nativepay.util.Util; public class NativeCallBackServlet extends HttpServlet{ /** * */ private static final long serialVersionUID = 3358943773018523786L; @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { PrintWriter pw = resp.getWriter(); String retStr = new String(Util.readInput(req.getInputStream()),"utf-8"); //掃碼返回XML demo // <xml><appid><![CDATA[wxe9fa16c146eXXXXX]]></appid> // <openid><![CDATA[oAjrAjrw81UZuAlM3F_03tmxeSG4]]></openid> // <mch_id><![CDATA[1269011111]]></mch_id> // <is_subscribe><![CDATA[Y]]></is_subscribe> // <nonce_str><![CDATA[KwRqjXOW7k0wOZvL]]></nonce_str> // <product_id><![CDATA[8888]]></product_id> // <sign><![CDATA[41F26B7F22C8625060ABC299EEA754D7]]></sign> // </xml> try { Map<String, Object> map = XMLParser.getMapFromXML(retStr); //outTradeNo 訂單號 UnifiedOrderBean order = new UnifiedOrderBean(map.get("appid").toString(), map.get("mch_id").toString(), "測試1", RequestUtil.getRandomStringByLength(32), null, "Ipad mini 16G 白色", "Ipad mini 16G 白色", "java demo", new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()), "CNY", 1, "122.224.40.204", new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()), new SimpleDateFormat("yyyyMMddHHmmss").format(new Date(new Date().getTime()+1800000)), "WXG", "http://????/wx_nativepay/native", "NATIVE", map.get("product_id").toString(), "no_credit", map.get("openid").toString()); order.setSign(Signature.getSign(order)); HttpRequest http = new HttpRequest(); String retOrder = http.sendPost("https://api.mch.weixin.qq.com/pay/unifiedorder", order); //贊成訂單接口返回demo // <xml><return_code><![CDATA[SUCCESS]]></return_code> // <return_msg><![CDATA[OK]]></return_msg> // <appid><![CDATA[wxe9fa16c146eXXXXX]]></appid> // <mch_id><![CDATA[1269011111]]></mch_id> // <device_info><![CDATA[測試1]]></device_info> // <nonce_str><![CDATA[DwEgTeCXHq3z8VRX]]></nonce_str> // <sign><![CDATA[68F3113F0E246EED9CAA49E93ACAC79E]]></sign> // <result_code><![CDATA[SUCCESS]]></result_code> // <prepay_id><![CDATA[wx20160319131705668cacb34b0717748054]]></prepay_id> // <trade_type><![CDATA[NATIVE]]></trade_type> // <code_url><![CDATA[weixin://wxpay/bizpayurl?pr=mt8vqLq]]></code_url>此處的code_url模式二里面能夠直接展現給用戶進行掃碼支付,有效期2小時 // </xml> Map<String, Object> mapOrder = XMLParser.getMapFromXML(retOrder); //返回return xml Map<String, Object> retNative = new HashMap<String, Object>(); retNative.put("return_code", mapOrder.get("return_code")); retNative.put("return_msg", mapOrder.get("return_msg")); retNative.put("appid", mapOrder.get("appid")); retNative.put("mch_id", mapOrder.get("mch_id")); retNative.put("nonce_str", mapOrder.get("nonce_str")); retNative.put("prepay_id", mapOrder.get("prepay_id")); retNative.put("result_code", mapOrder.get("result_code")); retNative.put("sign", Signature.getSign(retNative)); pw.print(XMLParser.getXMLFromMap(retNative)); } catch (Exception e) { e.printStackTrace(); }finally{ pw.flush(); pw.close(); } } }
一切OK,到此結束測試