微信公眾號支付梳理

忙了整整一天秕重,累的要死厉膀,堅持更新。
以前都是根據(jù)第三方SDK來做支付凳兵,封裝的確實不錯企软,但是自己也是模模糊糊的仗哨,本文只是寫下公眾號的大概支付流程,所以并不會寫太多的代碼萨醒。

1苇倡、首先囤踩,假設(shè)我們已經(jīng)配置好微信授權(quán)目錄,高职,并且假設(shè)授權(quán)目錄為:www.guohe.com辞州,那么在微信支付頁面需填寫下面的url:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

解釋:

appid:公眾號id
redirect_uri:后臺支付接口和支付金額变过,例如:www.guohe.com/pay/money=100(必須將此鏈接進行encodeURI編碼)
state:訂單號碼

2、后臺處理支付功能代碼:
在這里除了接收方法中傳進來的金額岛杀、訂單號碼之外崭孤,還需要獲取些微信支付需要的參數(shù),例如公眾號秘鑰和公眾號id等遗锣。
具體如下:

GZHID:微信公眾號id
GZHSecret:微信公眾號密鑰id
SHHID:財付通商戶號
SHHKEY:商戶號對應(yīng)的密鑰
out_trade_no:商戶訂單號
money:金額
code:用戶的code
nonce_str:隨機數(shù) 
spbill_create_ip:訂單生成的機器 IP
notify_url:回調(diào)地址

通過code獲取微信用戶的openId和access_token嗤形,工具類:

    /**
     * 通過微信用戶的code換取網(wǎng)頁授權(quán)access_token
     * @return
     * @throws IOException
     * @throws
     */
    public List<Object> accessToken(String code) throws IOException {
        List<Object> list = new ArrayList<Object>();
        String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="
                + WeChat.HYGZHID + "&secret=" + WeChat.HYGZHSecret+ "&code=" + code + "&grant_type=authorization_code";
        HttpClient client = new DefaultHttpClient();
        HttpPost post = new HttpPost(url);
        HttpResponse res = client.execute(post);
        if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
            HttpEntity entity = res.getEntity();
            String str = org.apache.http.util.EntityUtils.toString(entity, "utf-8");
            ObjectMapper mapper=new com.fasterxml.jackson.databind.ObjectMapper.ObjectMapper();
            Map<String,Object> jsonOb=mapper.readValue(str, Map.class);
            list.add(jsonOb.get("access_token"));
            list.add(jsonOb.get("openid"));
        }
        return list;
    }

在這里生成預(yù)支付訂單號的簽名sign:

    RequestHandler reqHandler = new RequestHandler(request, response);
    reqHandler.init( GZHID,  GZHSecret,  SHHKEY);
    String sign = reqHandler.createSign(packageParams);

生成官方穩(wěn)定xml數(shù)據(jù):

    String xml="<xml>"+
            "<appid>"+ GZHID+"</appid>"+
            "<mch_id>"+ SHHID+"</mch_id>"+
            "<nonce_str>"+nonce_str+"</nonce_str>"+
            "<sign>"+sign+"</sign>"+
            "<body><![CDATA["+"費用"+"]]></body>"+
            "<out_trade_no>"+out_trade_no+"</out_trade_no>"+
            "<total_fee>"+finalmoney+"</total_fee>"+
            "<spbill_create_ip>"+spbill_create_ip+"</spbill_create_ip>"+
            "<notify_url>"+notify_url+"</notify_url>"+
            "<trade_type>"+trade_type+"</trade_type>"+
            "<openid>"+openid+"</openid>"+
            "</xml>";

向微信官方統(tǒng)一接口發(fā)送數(shù)據(jù):

    String createOrderURL = "https://api.mch.weixin.qq.com/pay/unifiedorder";
    String prepay_id="";
    try {
        prepay_id = GetWxOrderno.getPayNo(createOrderURL, xml);
        if(prepay_id.equals("")){
            mv.addObject("ErrorMsg", "支付錯誤");
            mv.setViewName("error");
            return mv;
        }
    } catch (Exception e) {
        logger.error("統(tǒng)一支付接口獲取預(yù)支付訂單出錯", e);
        mv.setViewName("error");
        return mv;
    } else{
            mv.addObject("SUCCESS", "支付成功");
            mv.setViewName("wechat/pay");
}

3、回調(diào)地址方法的思路只是接收微信通知叶组,并且返回就可以了历造,不然微信會一直發(fā)送通知的,微信發(fā)送的參數(shù)也是一段xml格式的數(shù)據(jù)枣氧,是需要解析的垮刹,下面是解析工具類张弛,做個記錄:

    /**
     * description: 解析微信通知xml
     * 
     * @param xml
     * @return
     */
    @SuppressWarnings({ "unused", "rawtypes", "unchecked" })
    private static Map parseXmlToList(String xml) {
        Map retMap = new HashMap();
        try {
            StringReader read = new StringReader(xml);
            // 創(chuàng)建新的輸入源SAX 解析器將使用 InputSource 對象來確定如何讀取 XML 輸入
            InputSource source = new InputSource(read);
            // 創(chuàng)建一個新的SAXBuilder
            SAXBuilder sb = new org.jdom.input.SAXBuilder.SAXBuilder();
            // 通過輸入源構(gòu)造一個Document
            Document doc = (Document) sb.build(source);
            Element root = doc.getRootElement();// 指向根節(jié)點
            List<Element> es = root.getChildren();
            if (es != null && es.size() != 0) {
                for (Element element : es) {
                    retMap.put(element.getName(), element.getValue());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return retMap;
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末寺董,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子滩字,更是在濱河造成了極大的恐慌御吞,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異揍诽,居然都是意外死亡暑脆,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門埃篓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來根资,“玉大人架专,你說我怎么就攤上這事⌒粒” “怎么了部脚?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長裤纹。 經(jīng)常有香客問我委刘,道長,這世上最難降的妖魔是什么鹰椒? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任锡移,我火速辦了婚禮,結(jié)果婚禮上漆际,老公的妹妹穿的比我還像新娘淆珊。我一直安慰自己奸汇,他們只是感情好施符,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布往声。 她就那樣靜靜地躺著,像睡著了一般戳吝。 火紅的嫁衣襯著肌膚如雪浩销。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天听哭,我揣著相機與錄音慢洋,去河邊找鬼。 笑死陆盘,一個胖子當著我的面吹牛且警,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播礁遣,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼斑芜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了祟霍?” 一聲冷哼從身側(cè)響起杏头,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎沸呐,沒想到半個月后醇王,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡崭添,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年寓娩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呼渣。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡棘伴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出屁置,到底是詐尸還是另有隱情焊夸,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布蓝角,位于F島的核電站阱穗,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏使鹅。R本人自食惡果不足惜揪阶,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望患朱。 院中可真熱鬧鲁僚,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽姐直。三九已至倦淀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間声畏,已是汗流浹背撞叽。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留插龄,地道東北人愿棋。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像均牢,于是被迫代替她去往敵國和親糠雨。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

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

  • 關(guān)于微信支付 生活中的微信支付 目前我們?nèi)粘I钪薪佑|得比較多的線上電子支付方式主要有兩種徘跪,一種是支付寶甘邀,另一種就...
    積_漸閱讀 3,913評論 3 26
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,742評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)垮庐,斷路器松邪,智...
    卡卡羅2017閱讀 134,628評論 18 139
  • 閻云思索了好久,灼熱的空氣中的清風都沒有打斷他的思緒哨查。不過清風卻把八人的氣味帶到了那只巨型哈士奇那里逗抑。 它聞著空氣...
    野性浮云閱讀 294評論 0 1
  • 越是到后來,才明白堅持的重要性寒亥。也越是到后來才發(fā)現(xiàn)堅持有多有必要邮府。 不知道這個今日事今日畢的習慣應(yīng)該在什么...
    Jleeci閱讀 248評論 0 0