小程序中發(fā)起微信支付

看官方文檔還是會(huì)暈畸肆,這里就直接寫一下如何實(shí)現(xiàn)吧僚匆。

需要在小程序端實(shí)現(xiàn)的內(nèi)容

第一步:生成商戶訂單
// 生成商戶訂單即發(fā)起預(yù)支付
/**生成商戶訂單 */
generateOrder: function (openid) {
  var that = this
  //統(tǒng)一支付
  wx.request({
    url: 'http://localhost:8070/RMS/pay_pay.action',  // 自己的后臺(tái)支付接口
    method: 'GET',
    data: {
      total_fee: '1', // 以分為單位突梦,'1'即 -> 1分錢敏弃, 必填6⑺铩B成! 
      body: '支付測(cè)試', // 商品描述振惰,即商品名稱歌溉,注意:此參數(shù)必填!!痛垛!
    },
    success: function (res) {
      var pay = res.data
      //發(fā)起支付
      var timeStamp = pay[0].timeStamp;
      var packages = pay[0].package;
      var paySign = pay[0].paySign;
      var nonceStr = pay[0].nonceStr;
      var param = { "timeStamp": timeStamp, "package": packages, "paySign": paySign, "signType": "MD5", "nonceStr": nonceStr };
      that.pay(param)
     },
  })
},
第二步:發(fā)起支付
  /* 支付   */
  payMoney: function (param) {
    console.log("開(kāi)始支付");
    var that = this;
    wx.requestPayment({
      'timeStamp': param.timeStamp,
      'nonceStr': param.nonceStr,
      'package': param.package,
      'signType': param.signType,
      'paySign': param.paySign,
      'success': function (res) {
         wx.showToast({
           title: '支付成功',
           icon: 'success',
           duration: 3000
         })
      },
      'fail': function (res) {
        console.log("支付失敗");
        api.showModal("支付失敗草慧,請(qǐng)重試");
      }
    })
  },

其實(shí)支付功能在小程序前端就這么點(diǎn)代碼,主要還是后臺(tái)的一些操作匙头。
為了安全考慮漫谷,需要用到的,小程序appid和秘鑰蹂析,商戶的商戶號(hào)和支付秘鑰全都放在后臺(tái)舔示。
哦,看到這里你可能問(wèn)我电抚,什么是商戶號(hào)和商戶秘鑰惕稻,那你首先要做的就不是寫代碼了,而是先去看一下官方文檔蝙叛,起碼簡(jiǎn)單了解一下支付的業(yè)務(wù)流程缩宜,這里你需要注意微信官方文檔頁(yè)面下邊的五個(gè)步驟,看看它跳轉(zhuǎn)之后的內(nèi)容甥温。

然后先去申請(qǐng)開(kāi)通一下小程序的支付功能


圖片1.png

再去微信商戶的平臺(tái)設(shè)置并獲取一下你的商戶號(hào)和支付秘鑰,具體方法在這也給你:微信支付商戶平臺(tái)-配置密鑰/API安全

之后就基本都是后臺(tái)的任務(wù)了妓布。
調(diào)用支付統(tǒng)一下單API來(lái)獲取prepay_id姻蚓,并將小程序調(diào)起支付數(shù)據(jù)需要簽名的字段appId,timeStamp匣沼,nonceStr狰挡,package再次簽名——小程序調(diào)起支付API

后臺(tái)代碼

/** 
* @author 
* @version 創(chuàng)建時(shí)間:2017年1月21日 下午4:59:03 
* 小程序端請(qǐng)求的后臺(tái)action,返回簽名后的數(shù)據(jù)傳到前臺(tái)
*/
public class PayAction {
    private String total_fee;//總金額
    private String body;//商品描述
    private String detail;//商品詳情    
    private String attach;//附加數(shù)據(jù)
    private String time_start;//交易起始時(shí)間
    private String time_expire;//交易結(jié)束時(shí)間 
    private String openid;//用戶標(biāo)識(shí)

    private JSONArray jsonArray=new JSONArray();
    public String pay() throws UnsupportedEncodingException, DocumentException{

        body = new String(body.getBytes("UTF-8"),"ISO-8859-1");  
        String appid = "替換為自己的小程序ID";//小程序ID
        String mch_id = "替換為自己的商戶號(hào)";//商戶號(hào)
        String nonce_str = UUIDHexGenerator.generate();//隨機(jī)字符串
        String today = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
        String code = PayUtil.createCode(8);
        String out_trade_no = mch_id+today+code;//商戶訂單號(hào)
        String spbill_create_ip = "替換為自己的終端IP";//終端IP
        String notify_url = "http://www.weixin.qq.com/wxpay/pay.php";//通知地址
        String trade_type = "JSAPI";//交易類型  
        String openid="替換為用戶的openid";//用戶標(biāo)識(shí)

        //封裝支付參數(shù)
        PaymentPo paymentPo = new PaymentPo();

        paymentPo.setAppid(appid);
        paymentPo.setMch_id(mch_id);
        paymentPo.setNonce_str(nonce_str);
        String newbody=new String(body.getBytes("ISO-8859-1"),"UTF-8");//以u(píng)tf-8編碼放入paymentPo释涛,微信支付要求字符編碼統(tǒng)一采用UTF-8字符編碼
        paymentPo.setBody(newbody);
        paymentPo.setOut_trade_no(out_trade_no);
        paymentPo.setTotal_fee(total_fee);
        paymentPo.setSpbill_create_ip(spbill_create_ip);
        paymentPo.setNotify_url(notify_url);
        paymentPo.setTrade_type(trade_type);
        paymentPo.setOpenid(openid);

        // 把請(qǐng)求參數(shù)打包成Map
        Map<String, String> sParaTemp = new HashMap<String, String>();
        sParaTemp.put("appid", paymentPo.getAppid());
        sParaTemp.put("mch_id", paymentPo.getMch_id());
        sParaTemp.put("nonce_str", paymentPo.getNonce_str());
        sParaTemp.put("body",  paymentPo.getBody());
        sParaTemp.put("out_trade_no", paymentPo.getOut_trade_no());
        sParaTemp.put("total_fee",paymentPo.getTotal_fee());
        sParaTemp.put("spbill_create_ip", paymentPo.getSpbill_create_ip());
        sParaTemp.put("notify_url",paymentPo.getNotify_url());
        sParaTemp.put("trade_type", paymentPo.getTrade_type());
        sParaTemp.put("openid", paymentPo.getOpenid());

        // 除去Map中的空值和簽名參數(shù)
        Map<String, String> sPara = PayUtil.paraFilter(sParaTemp);
        String prestr = PayUtil.createLinkString(sPara); // 把Map所有元素加叁,按照“參數(shù)=參數(shù)值”的模式用“&”字符拼接成字符串
        String key = "&key=替換為商戶支付密鑰"; // 商戶支付密鑰
        //MD5運(yùn)算生成簽名
        String mysign = PayUtil.sign(prestr, key, "utf-8").toUpperCase();
        paymentPo.setSign(mysign);
        //打包要發(fā)送的xml
        String respXml = MessageUtil.messageToXML(paymentPo);
        // 打印respXml發(fā)現(xiàn),得到的xml中有“__”不對(duì)唇撬,應(yīng)該替換成“_”
        respXml = respXml.replace("__", "_");
        String url = "https://api.mch.weixin.qq.com/pay/unifiedorder";//統(tǒng)一下單API接口鏈接
        String param = respXml;
        String result =PayUtil.httpRequest(url, "POST", param);
        // 將解析結(jié)果存儲(chǔ)在HashMap中
        Map<String, String> map = new HashMap<String, String>();
        InputStream in=new ByteArrayInputStream(result.getBytes());  
        // 讀取輸入流
        SAXReader reader = new SAXReader();
        Document document = reader.read(in);
        // 得到xml根元素
        Element root = document.getRootElement();
        // 得到根元素的所有子節(jié)點(diǎn)
        @SuppressWarnings("unchecked")
        List<Element> elementList = root.elements();
        for (Element element : elementList) {
            map.put(element.getName(), element.getText());
        }
        // 返回信息
        String return_code = map.get("return_code");//返回狀態(tài)碼
        String return_msg = map.get("return_msg");//返回信息
        JSONObject JsonObject=new JSONObject() ;
        //請(qǐng)求成功
        if(return_code=="SUCCESS"||return_code.equals(return_code)){
            // 業(yè)務(wù)結(jié)果
            String prepay_id = map.get("prepay_id");//返回的預(yù)付單信息
            String nonceStr=UUIDHexGenerator.generate();
            JsonObject.put("nonceStr", nonceStr);
            JsonObject.put("package", "prepay_id="+prepay_id);
            Long timeStamp= System.currentTimeMillis()/1000;
            JsonObject.put("timeStamp", timeStamp+"");
            String stringSignTemp = "appId="+appid+"&nonceStr=" + nonceStr + "&package=prepay_id=" + prepay_id+ "&signType=MD5&timeStamp=" + timeStamp;
            //再次簽名
            String paySign=PayUtil.sign(stringSignTemp, "&key=替換為自己的商戶密鑰", "utf-8").toUpperCase();
            JsonObject.put("paySign", paySign);
            jsonArray.add(JsonObject);
        }
        return "pay";

    }
    //set get方法略
}

這里邊開(kāi)頭獲取的那一段數(shù)據(jù)(總金額/商品描述/商品詳情/附加數(shù)據(jù)/...)它匕,里邊只有總金額和商品描述是必須的,其他的你酌情處理窖认。
不過(guò)基本都是傳遞一個(gè)商品id豫柬,然后后臺(tái)自己去數(shù)據(jù)庫(kù)中查找對(duì)應(yīng)的商品信息∑私看你跟后臺(tái)如何溝通處理了烧给。

  • 后臺(tái)業(yè)務(wù)邏輯涉及到的工具類及參數(shù)封裝類
MessageUtil 

public class MessageUtil {

    public static HashMap<String,String> parseXML(HttpServletRequest request) throws Exception, IOException{
        HashMap<String,String> map=new HashMap<String,String>();
        // 通過(guò)IO獲得Document
        SAXReader reader = new SAXReader();
        Document doc = reader.read(request.getInputStream());

        //得到xml的根節(jié)點(diǎn)
        Element root=doc.getRootElement();
        recursiveParseXML(root,map);
        return map;
    }
    private static void recursiveParseXML(Element root,HashMap<String,String> map){
        //得到根節(jié)點(diǎn)的子節(jié)點(diǎn)列表
        List<Element> elementList=root.elements();
        //判斷有沒(méi)有子元素列表
        if(elementList.size()==0){
            map.put(root.getName(), root.getTextTrim());
        }
        else{
            //遍歷
            for(Element e:elementList){
                recursiveParseXML(e,map);
            }
        }
    }
    private static XStream xstream = new XStream(new XppDriver() {
        public HierarchicalStreamWriter createWriter(Writer out) {
            return new PrettyPrintWriter(out) {
                // 對(duì)所有xml節(jié)點(diǎn)都增加CDATA標(biāo)記
                boolean cdata = true;

                public void startNode(String name, Class clazz) {
                    super.startNode(name, clazz);
                }

                protected void writeText(QuickWriter writer, String text) {
                    if (cdata) {
                        writer.write("<![CDATA[");
                        writer.write(text);
                        writer.write("]]>");
                    } else {
                        writer.write(text);
                    }
                }
            };
        }
    });

    public static String messageToXML(PaymentPo paymentPo){
        xstream.alias("xml",PaymentPo.class);
        return xstream.toXML(paymentPo);
    }
}

PaymentPo//封裝支付參數(shù)實(shí)體
package cn.it.shop.util;
/** 
* @author 
* @version 創(chuàng)建時(shí)間:2017年1月21日 下午4:20:52 
* 類說(shuō)明 
*/
public class PaymentPo {
    private String appid;//小程序ID
    private String mch_id;//商戶號(hào)
    private String device_info;//設(shè)備號(hào)
    private String nonce_str;//隨機(jī)字符串
    private String sign;//簽名
    private String body;//商品描述  
    private String detail;//商品詳情    
    private String attach;//附加數(shù)據(jù)
    private String out_trade_no;//商戶訂單號(hào)
    private String fee_type;//貨幣類型
    private String spbill_create_ip;//終端IP
    private String time_start;//交易起始時(shí)間
    private String time_expire;//交易結(jié)束時(shí)間 
    private String goods_tag;//商品標(biāo)記
    private String total_fee;//總金額
    private String notify_url;//通知地址    
    private String trade_type;//交易類型    
    private String limit_pay;//指定支付方式
    private String openid;//用戶標(biāo)識(shí)

    //set get方法略

}
PayUtil//工具類
/**
 * @author 
 * @version 創(chuàng)建時(shí)間:2017年1月17日 下午7:46:29 類說(shuō)明
 */
public class PayUtil {
    /**
     * 簽名字符串
     * @param text需要簽名的字符串
     * @param key 密鑰
     * @param input_charset編碼格式
     * @return 簽名結(jié)果
     */
    public static String sign(String text, String key, String input_charset) {
        text = text + key;
        return DigestUtils.md5Hex(getContentBytes(text, input_charset));
    }

    /**
     * 簽名字符串
     *  @param text需要簽名的字符串
     * @param sign 簽名結(jié)果
     * @param key密鑰
     * @param input_charset 編碼格式
     * @return 簽名結(jié)果
     */
    public static boolean verify(String text, String sign, String key, String input_charset) {
        text = text + key;
        String mysign = DigestUtils.md5Hex(getContentBytes(text, input_charset));
        if (mysign.equals(sign)) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * @param content
     * @param charset
     * @return
     * @throws SignatureException
     * @throws UnsupportedEncodingException
     */
    public static byte[] getContentBytes(String content, String charset) {
        if (charset == null || "".equals(charset)) {
            return content.getBytes();
        }
        try {
            return content.getBytes(charset);
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException("MD5簽名過(guò)程中出現(xiàn)錯(cuò)誤,指定的編碼集不對(duì),您目前指定的編碼集是:" + charset);
        }
    }

    /**
     * 生成6位或10位隨機(jī)數(shù) param codeLength(多少位)
     * @return
     */
    public static String createCode(int codeLength) {
        String code = "";
        for (int i = 0; i < codeLength; i++) {
            code += (int) (Math.random() * 9);
        }
        return code;
    }

    private static boolean isValidChar(char ch) {
        if ((ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z'))
            return true;
        if ((ch >= 0x4e00 && ch <= 0x7fff) || (ch >= 0x8000 && ch <= 0x952f))
            return true;// 簡(jiǎn)體中文漢字編碼
        return false;
    }

    /**
     * 除去數(shù)組中的空值和簽名參數(shù)
     * @param sArray 簽名參數(shù)組
     * @return 去掉空值與簽名參數(shù)后的新簽名參數(shù)組
     */
    public static Map<String, String> paraFilter(Map<String, String> sArray) {
        Map<String, String> result = new HashMap<String, String>();
        if (sArray == null || sArray.size() <= 0) {
            return result;
        }
        for (String key : sArray.keySet()) {
            String value = sArray.get(key);
            if (value == null || value.equals("") || key.equalsIgnoreCase("sign")
                    || key.equalsIgnoreCase("sign_type")) {
                continue;
            }
            result.put(key, value);
        }
        return result;
    }

    /**
     * 把數(shù)組所有元素排序,并按照“參數(shù)=參數(shù)值”的模式用“&”字符拼接成字符串
     * @param params 需要排序并參與字符拼接的參數(shù)組
     * @return 拼接后字符串
     */
    public static String createLinkString(Map<String, String> params) {
        List<String> keys = new ArrayList<String>(params.keySet());
        Collections.sort(keys);

        String prestr = "";

        for (int i = 0; i < keys.size(); i++) {
            String key = keys.get(i);
            String value = params.get(key);
            if (i == keys.size() - 1) {// 拼接時(shí)喝噪,不包括最后一個(gè)&字符
                prestr = prestr + key + "=" + value;
            } else {
                prestr = prestr + key + "=" + value + "&";
            }
        }
        return prestr;
    }
    /**
     * 
     * @param requestUrl請(qǐng)求地址
     * @param requestMethod請(qǐng)求方法
     * @param outputStr參數(shù)
     */
    public static String httpRequest(String requestUrl,String requestMethod,String outputStr){
        // 創(chuàng)建SSLContext
        StringBuffer buffer=null;
        try{
        URL url = new URL(requestUrl);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod(requestMethod);
        conn.setDoOutput(true);
        conn.setDoInput(true);
        conn.connect();

        //往服務(wù)器端寫內(nèi)容
        if(null !=outputStr){
            OutputStream os=conn.getOutputStream();
            os.write(outputStr.getBytes("utf-8"));
            os.close();
        }
        // 讀取服務(wù)器端返回的內(nèi)容
        InputStream is = conn.getInputStream();
        InputStreamReader isr = new InputStreamReader(is, "utf-8");
        BufferedReader br = new BufferedReader(isr);
        buffer = new StringBuffer();
        String line = null;
        while ((line = br.readLine()) != null) {
                      buffer.append(line);
        }
        }catch(Exception e){
            e.printStackTrace();
        }
        return buffer.toString();
        }   
    public static String urlEncodeUTF8(String source){
        String result=source;
        try {
            result=java.net.URLEncoder.encode(source, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return result;
    }
}
UUIDHexGenerator
package cn.it.shop.util;

import java.net.InetAddress;

/**
 * @author 
 * @version 創(chuàng)建時(shí)間:2017年1月17日 下午7:45:06 類說(shuō)明
 */
public class UUIDHexGenerator {
    private static String sep = "";

    private static final int IP;

    private static short counter = (short) 0;

    private static final int JVM = (int) (System.currentTimeMillis() >>> 8);

    private static UUIDHexGenerator uuidgen = new UUIDHexGenerator();

    static {
        int ipadd;
        try {
            ipadd = toInt(InetAddress.getLocalHost().getAddress());
        } catch (Exception e) {
            ipadd = 0;
        }
        IP = ipadd;
    }

    public static UUIDHexGenerator getInstance() {
        return uuidgen;
    }

    public static int toInt(byte[] bytes) {
        int result = 0;
        for (int i = 0; i < 4; i++) {
            result = (result << 8) - Byte.MIN_VALUE + (int) bytes[i];
        }
        return result;
    }

    protected static String format(int intval) {
        String formatted = Integer.toHexString(intval);
        StringBuffer buf = new StringBuffer("00000000");
        buf.replace(8 - formatted.length(), 8, formatted);
        return buf.toString();
    }

    protected static String format(short shortval) {
        String formatted = Integer.toHexString(shortval);
        StringBuffer buf = new StringBuffer("0000");
        buf.replace(4 - formatted.length(), 4, formatted);
        return buf.toString();
    }

    protected static int getJVM() {
        return JVM;
    }

    protected synchronized static short getCount() {
        if (counter < 0) {
            counter = 0;
        }
        return counter++;
    }

    protected static int getIP() {
        return IP;
    }

    protected static short getHiTime() {
        return (short) (System.currentTimeMillis() >>> 32);
    }

    protected static int getLoTime() {
        return (int) System.currentTimeMillis();
    }

    public static String generate() {
            return  new   StringBuffer(36).append(format(getIP())).append(sep).append(format(getJVM())).append(sep)
                .append(format(getHiTime())).append(sep).append(format(getLoTime())).append(sep)
                .append(format(getCount())).toString();
    }
}

這個(gè)后臺(tái)代碼具體有沒(méi)有什么問(wèn)題呢础嫡,我也不清楚,反正我這邊是可以支付成功的酝惧。
這代碼不用想榴鼎,肯定是我拷貝的伯诬。
參考文檔: 微信小程序支付

這里最后還有個(gè)需要注意的東西:你支付成功后需要給微信反饋!C史 姑廉!
具體如何反饋,讓你們后臺(tái)參考前文業(yè)務(wù)流程中的第四條:支付結(jié)果通用通知

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末翁涤,一起剝皮案震驚了整個(gè)濱河市桥言,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌葵礼,老刑警劉巖号阿,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異鸳粉,居然都是意外死亡扔涧,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門届谈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)枯夜,“玉大人,你說(shuō)我怎么就攤上這事艰山『ⅲ” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵曙搬,是天一觀的道長(zhǎng)摔吏。 經(jīng)常有香客問(wèn)我,道長(zhǎng)纵装,這世上最難降的妖魔是什么征讲? 我笑而不...
    開(kāi)封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮橡娄,結(jié)果婚禮上诗箍,老公的妹妹穿的比我還像新娘。我一直安慰自己瀑踢,他們只是感情好扳还,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著橱夭,像睡著了一般氨距。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上棘劣,一...
    開(kāi)封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天俏让,我揣著相機(jī)與錄音,去河邊找鬼。 笑死首昔,一個(gè)胖子當(dāng)著我的面吹牛寡喝,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播勒奇,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼预鬓,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了赊颠?” 一聲冷哼從身側(cè)響起格二,我...
    開(kāi)封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎竣蹦,沒(méi)想到半個(gè)月后顶猜,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡痘括,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年长窄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纲菌。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡挠日,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出翰舌,到底是詐尸還是另有隱情肆资,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布灶芝,位于F島的核電站,受9級(jí)特大地震影響唉韭,放射性物質(zhì)發(fā)生泄漏夜涕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一属愤、第九天 我趴在偏房一處隱蔽的房頂上張望女器。 院中可真熱鬧,春花似錦住诸、人聲如沸驾胆。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)丧诺。三九已至,卻和暖如春奄薇,著一層夾襖步出監(jiān)牢的瞬間驳阎,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留呵晚,地道東北人蜘腌。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像饵隙,于是被迫代替她去往敵國(guó)和親撮珠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 前言:本篇文章目的在于梳理知識(shí)金矛,鞏固思想芯急,學(xué)習(xí)總結(jié)。有什么好的建議绷柒,都可以留言志于。互相促進(jìn)废睦!總觀伺绽,微信支付,也沒(méi)心思...
    麥穗0615閱讀 10,027評(píng)論 8 70
  • 自己總結(jié)的微信支付寶支付流程和注意點(diǎn): 準(zhǔn)備工作: 需要公司的營(yíng)業(yè)執(zhí)照嗜湃,稅務(wù)信息奈应,等老板的身份證信息等,我記得购披,用...
    Www劉閱讀 18,558評(píng)論 2 50
  • 支付寶簡(jiǎn)介文檔 (適用于ydm-java接口與后臺(tái)刚陡,如有誤入惩妇,但愿也能給您帶來(lái)幫助) 此文檔寫于2017年3月,只...
    隔壁付叔叔閱讀 17,053評(píng)論 3 19
  • 實(shí)現(xiàn)支付寶支付的準(zhǔn)備工作: 1.向支付寶簽約筐乳,成為支付寶的商戶 簽約完成后歌殃,支付寶會(huì)提供一些必要的數(shù)據(jù)給我們 商戶...
    Anson楊春安閱讀 8,190評(píng)論 0 6
  • 小芳 我喜歡秋天的雨: 沒(méi)有春雨來(lái)的珍貴, 沒(méi)有夏雨來(lái)的熱切蝙云, 沒(méi)有冬雨來(lái)的動(dòng)聽(tīng)氓皱。 悄無(wú)聲息的停駐, 不溫...
    五陵春閱讀 147評(píng)論 0 1