Android 調用第三方微信支付

很久沒寫東西了,恰逢最近作三方支付,聽身邊不少開發的朋友說都被微信坑過,就把過程記錄下,避免之後再碰到相似的坑。java

第一步:

  1. 其實第一步實在是沒什麼好說明的,到微信開放平臺填寫相應的資料便可。
  2. 而後申請支付權限
    這裏寫圖片描述
  3. 相應的都去申請,主要是一些資料的審覈。

注意:微信申請的支付過程當中,大概兩到三個工做日就會有回覆,會給你申請的銀行卡號上隨機轉入一筆錢(想指着這發財的仍是免了吧,通常是幾毛幾分錢),而後須要在你綁定的微信號上開發激活帳號。這些在申請文檔步驟中都有提示。android

第二步:

  • 以上準備工做完過後正式進入接入微信支付到APP中的流程。web

    1. 沒什麼可多說的,首先要作的是先導入微信支付的相應的SDK,微信這一點目前作的仍是比較好的,不用下載庫文件,能夠直接引用
      這裏寫圖片描述
    2. 其實微信讓人感受的有點繞的地方就在於它的流程的嚴密性的地方,之因此在第二部才提到這個微信的流程,是由於從這個地方開始,是真正的開始走微信的流程的時候了
      這裏寫圖片描述
  • 流程圖中的1,2兩步不用多說,是開發者在本身應用中的內容api

  • 從3開始,把相應的信息傳遞給自家後臺,由後臺開發人員去調用微信的統一下單的APP,就是第4這個流程,目的是須要在服務器端進行加密操做,且返回給相應的訂單信息(第5步),好比訂單號之類的(注意:相應的信息,儘可能不要在客戶端操做)最重要的是簽名,稍後會具體說
  • 從第六、7開始就是調用微信支付的核心代碼了服務器

    1. 在調用支付前,先註冊APPID
            商戶APP工程中引入微信JAR包,調用API前,須要先向微信註冊您的APPID,代碼以下:
        final IWXAPI msgApi = WXAPIFactory.createWXAPI(context, null);
            // 將該app註冊到微信
        msgApi.registerApp("wxd930ea5d5a258f4f");
    2.而後調用核心代碼
IWXAPI api;
PayReq request = new PayReq();
request.appId = "wxd930ea5d5a258f4f";
request.partnerId = "1900000109";
request.prepayId= "1101000000140415649af9fc314aa427",;
request.packageValue = "Sign=WXPay";
request.nonceStr= "1101000000140429eb40476f8896f4c9";
request.timeStamp= "1398746574";
request.sign= "7FFECB600D7157C5AA49810D2D8F28BC2811827B";
api.sendReq(request);

這裏寫圖片描述

注意:特別要注意簽名的問題啊老鐵們,這個簽名是二次簽名過的,就是說在第5步和第6步之間,必須把第一次返回的簽名信息,進行二次簽名,這個很是重要,筆者就是由於這個操做給坑了好久。微信

  • 微信支付的回調,一樣重要,不少同窗的支付坑,就坑在了回調不起來上面,緣由固然有不少種,微信的回調文檔是這樣寫的,注意我劃線的部分
    這裏寫圖片描述
    請看好,這個包名,可不是讓寫net.sourceforge.simcpux,這個是示例的包名,在你本身項目中,只需寫入包名和類名便可,這個時候,這個包名和類名必定不能寫錯的
    這裏寫圖片描述

那個WXEnterActivity這個類是作微信分享時用的,只作支付的能夠忽略掉,注意回調結果app

這裏寫圖片描述

第三步:

還有就是千萬不要忘記,在AndroidManifest.xml中的配置文件

1. 權限
2. 配置核心代碼svg

<activity  android:name=".wxapi.WXEntryActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
        <activity  android:name="com.tencent.tauth.AuthActivity" android:launchMode="singleTask" android:noHistory="true">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />

                <data android:scheme="你的微信註冊的AppID" />
            </intent-filter>
        </activity>

以上就是使用android開發者接入微信支付的簡單流程
總結:
1. 第一個就是那個簽名了,我相信不少開發者頭疼就在於這個簽名上了,二次復籤別忘了
2. 第二個是那個時間戳了,請認真看清楚這個時間戳是10位的,是精確到秒既可的,我們平時用的13位的那個精確到了毫秒
3. 查看是否在AndroidManifest.xml中配置了核心代碼
最最重要的,先認真閱讀流程圖和開發文檔,其實不少錯誤,文檔中都有提示的。
暫時mark到這吧!微信支付