1. 程式人生 > >呼叫第三方介面~支付寶

呼叫第三方介面~支付寶

你是大神就別看了,浪費時間。

這次遇到 對接支付寶支付,真的很難受。 大家都說簡單,確實! 到最後,一大神幫我寫了,就幾行程式碼  【捂臉】 ,呵呵了~ 

這幾天都睡不好,本來專案說不用接支付的,到後來要了,無語!

廢話不多說,開始吧!

--------------------------------------------------------------------------------------------------------------------

前幾天後臺哥給我一個文件,是介面支付文件,裡面有兩個連結,還有四個引數。(這是後話:到後來我才知道,兩個連結只要其中一個就行了,我就無語了。   我開始以為兩個都要用到,都要呼叫微笑

!!  )

然後我看官方文件,要 賬號、公鑰、祕鑰 ,但是我只有 後臺哥給的兩介面!兩介面!心裡無語,就只能還是看官方文件了微笑

第一步肯定是下載官方demo啊,然後執行!如圖:


搞毛啊,支付失敗!   其實是沒有賬號、公鑰之類的 ,就是這些如圖:


然後看著文件、看著demo, 可是我只有兩個介面啊!!  沒辦法,我技術菜,所以就百度啊,結果網上全部都是官網文件拿過來抄一遍,好點的,就寫幾句,基本上也是官方demo。 微笑 心裡頓時無數個神獸在狂奔!!

就算是狂奔那也要接入自己的專案中啊,所以先把官方能用的都拿過來用。  像  SDK、 Manifest、類,都是直接拿過來用的。如圖:




 因為我沒有賬號之類的,所以支付失敗微笑


好!  這些都拷貝到專案中。然後就做最重要的了。寫程式碼!!

先看效果圖吧(如下)


這個介面主要是 EditText 和 RecyclerView ,按鈕是TextView。

介面的話說起來也簡單,沒什麼難的,網上搜索一大堆,就不說了。這篇文章主要說對接 後臺哥 給的介面,讓我吐血幾桶的介面!!微笑

還是看文件吧:

orderInfo 是訂單資訊,難道是把 支付介面放在這裡?  錯!

這裡是拼接訂單資訊的變數,肯定是要放在點選事情中,例如官方demo的點選事件:

經過一段時間的研究,我基本上弄懂了,但是要前面說的賬號之類的,而我只有兩個介面和四個引數。 摸瞎微笑  沒辦法,就各種試~ 結果還是不行。 然後去群裡問,結果被人鄙視了。說對接支付寶最簡單,好簡單。就微信難點。

我艹,簡單你就幫忙啊,幫我搞一下,我還說了有償呢!!又不是白佔用你時間,我知道大神的時間寶貴。多的沒有50-100 肯定是有的(我最近搬家交三付一、買了電瓶車,才過幾天就被碰瓷的人訛了500大洋,不說別的,只怪自己不小心、又要還房貸、搬家後還要買點東西,還借了錢,實在是沒有多的,但是50-100 還是有的),就當作請大神吃飯吧,可是沒有人。 到昨天終於有個大神幫忙了(後話:大神人真的非常好,就是不給我  支付寶賬號,無賴。 感謝吧!)

不吐槽了~  弱雞就是弱雞!

--------------------------------------------------------------------------------------------------------------------------------------------

按我這個介面,要支付的話,肯定要有 訂單號、標題、內容、金額。如圖:

getOutTradeNo 就是訂單號,我看了網上都是以時間來定義訂單號的,這也是我看的最多的,但是大神肯定有其他辦法,我就選了這個簡單的。

payV2(View v)  這是 提交按鈕  的點選事件,這個是根據官方demo寫的,我覺得這樣寫真的很省事,就用了。連 類名 我都沒改。哈哈哈!

   

      

這四個 變數用 log,.e(); 都是可以打印出來的。這就前進了一小步。

然後就是呼叫支付介面了。這是後臺哥給的介面文件:



到了這一步,我基本上就抓瞎了,真的不知道怎麼弄, 然後在群裡問,群裡大神說你先搞一個 網路請求, 就是網路結構。 看文件是用get 和 post 請求。然後我在網上找,還是不會對接。

終於就在昨天,一個大神伸出援助之手!!  因為大神說的理論的懂,而且支付邏輯我也知道,就是不會寫,然後實在是不想浪費大神時間(大神是真心幫的解答),然後我無恥我說:大神幫我寫吧,這樣就不會浪費你時間。

誒~

---------------------------------------------------------------------------------------------------------------------------------------------------------------

開始   :是寫 map.put();  把要傳的值都put 出來。


還有兩個工具類:

HttpUtil 
public static String getUrlParamsByMap(Map<String, Object> map) {
    if (map == null) {
        return "";
}
    StringBuffer sb = new StringBuffer();
    for (Map.Entry<String, Object> entry : map.entrySet()) {
        sb.append(entry.getKey() + "=" + entry.getValue());
sb.append("&");
}
    String s = sb.toString();
    if (s.endsWith("&")) {
        s = s.substring(0, s.length() - 1);
}
    return s;
}

JsonUtils
  /**
     * 把一個map變成json字串
* @param map
* @return
*/
public static String parseMapToJson(Map<?, ?> map) {
        try {
            Gson gson = new Gson();
            return gson.toJson(map);
} catch (Exception e) {
        }
        return null;
}

    /**
     * 把一個json字串變成物件
* @param json
* @param cls
* @return
*/
public static <T> T parseJsonToBean(String json, Class<T> cls) {
        Gson gson = new Gson();
T t = null;
        try {
            t = gson.fromJson(json, cls);
} catch (Exception e) {
        }
        return t;
}

    /**
     * json字串變成map
     * @param json
* @return
*/
public static HashMap<String, Object> parseJsonToMap(String json) {
        Gson gson = new Gson();
Type type = new TypeToken<HashMap<String, Object>>() {
        }.getType();
HashMap<String, Object> map = null;
        try {
            map = gson.fromJson(json, type);
} catch (Exception e) {
        }
        return map;
}

    /**
     * json字串變成集合
* params: new TypeToken<List<yourbean>>(){}.getType(),
     *
     * @param json
* @param type  new TypeToken<List<yourbean>>(){}.getType()
     * @return
*/
public static List<?> parseJsonToList(String json, Type type) {
        Gson gson = new Gson();
List<?> list = gson.fromJson(json, type);
        return list;
}

    /**
     *
     * 獲取json串中某個欄位的值,注意,只能獲取同一層級的value
     *
     * @param json
* @param key
* @return
*/
public static String getFieldValue(String json, String key) {
        if (TextUtils.isEmpty(json))
            return null;
        if (!json.contains(key))
            return "";
JSONObject jsonObject = null;
String value = null;
        try {
            jsonObject = new JSONObject(json);
value = jsonObject.getString(key);
} catch (JSONException e) {
            e.printStackTrace();
}
        return value;
}

}

把這兩個類搞好後,還得 加一個

compile 'com.squareup.retrofit2:converter-gson:2.0.1'
,不加的話,肯定報錯!

最後最重要的就是這段程式碼了,就這段程式碼完成支付:


(對你有用就點個贊吧,希望能幫到你)