最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android App支付系列(一):微信支付接入詳細(xì)指南(附官方支付demo)

 更新時(shí)間:2016年11月25日 14:32:41   作者:xiong_it  
這篇文章主要介紹了Android App支付系列(一):微信支付接入詳細(xì)指南(附官方支付demo) ,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

寫(xiě)在前面

一家移動(dòng)互聯(lián)網(wǎng)公司,說(shuō)到底,要盈利總是需要付費(fèi)用戶的,自己開(kāi)發(fā)支付系統(tǒng)顯然是不明智的,國(guó)內(nèi)已經(jīng)有多家成熟的移動(dòng)支付提供商,騰訊就是其中之一。梳理了下微信支付的接入,今天給大家分享下騰訊旗下的微信支付SDK的接入流程。
接入流程

1.申請(qǐng)開(kāi)發(fā)者資質(zhì)

地址:https://open.weixin.qq.com/

使用公司管理者/高層帳號(hào)登錄微信開(kāi)放平臺(tái),進(jìn)入“賬號(hào)中心”,進(jìn)行開(kāi)發(fā)者資質(zhì)認(rèn)證,需要填寫(xiě)公司資料,包括但不限于,公司注冊(cè)號(hào),公司營(yíng)業(yè)執(zhí)照,公司對(duì)外辦公電話,公司對(duì)公銀行卡信息(卡號(hào),發(fā)卡行)。審核時(shí)間為一周左右。

備注:因?yàn)閺?015年10月1日起,國(guó)家實(shí)行三證(組織機(jī)構(gòu)代碼證,企業(yè)營(yíng)業(yè)執(zhí)照,稅務(wù)登記證)合一,所以組織機(jī)構(gòu)代碼處填寫(xiě)-工商執(zhí)照注冊(cè)號(hào),同樣,組織機(jī)構(gòu)代碼證,上傳-企業(yè)工商營(yíng)業(yè)執(zhí)照。

備注2:進(jìn)行開(kāi)發(fā)者資質(zhì)認(rèn)證需要支付300元人名幣/年,只有具備開(kāi)發(fā)者資質(zhì)認(rèn)證的開(kāi)發(fā)者才能夠使用app支付,授權(quán)登錄等接口。

2.申請(qǐng)APP_ID/APP_KEY

每個(gè)應(yīng)用/游戲要調(diào)用微信的接口都需要有一個(gè)微信標(biāo)志,這個(gè)唯一標(biāo)志通常成為APP_ID或者APP_KEY,各開(kāi)放平臺(tái)差異不大
 進(jìn)入管理中心,創(chuàng)建移動(dòng)應(yīng)用,每個(gè)開(kāi)發(fā)者具有10個(gè)應(yīng)用的創(chuàng)建機(jī)會(huì),好在創(chuàng)建的應(yīng)用可以隨時(shí)刪除。已上線的應(yīng)用就不建議手賤刪除!! 

 申請(qǐng)appid需要填寫(xiě)應(yīng)用信息:應(yīng)用名稱,包名,簽名(keystore的md5值去分號(hào)小寫(xiě)),icon(28*28 & 108*108),app下載地址等信息,即可分配到一個(gè)appid。
 備注:測(cè)試支付時(shí),務(wù)必使用申請(qǐng)時(shí)填寫(xiě)的keystore文件簽名,包名也需要核對(duì)清楚,必然無(wú)法調(diào)起支付,返回-1錯(cuò)誤碼。

3.申請(qǐng)支付能力 

 在管理中心,查看需要集成支付能力的app,找到“微信支付”一欄,點(diǎn)擊右側(cè)“申請(qǐng)開(kāi)通”,填寫(xiě)一些企業(yè)信息后等待審核,審核時(shí)間為一周左右,審核通過(guò)后,會(huì)得到一個(gè)企業(yè)商戶號(hào)及密碼,對(duì)公銀行卡中將收到幾分錢,進(jìn)入商戶平臺(tái),輸入收到的金錢金額以驗(yàn)證。驗(yàn)證通過(guò)后即可開(kāi)始集成支付調(diào)用。在這之前,調(diào)用支付接口是無(wú)法完成支付的。

4.代碼集成微信支付 

支付流程圖

微信支付流程圖白話版:

1.客戶端代碼得到用戶購(gòu)買的商品信息,將之傳給自己公司app服務(wù)器,參數(shù)包含但不限于以下:

params.put("appid", appID);// 微信appid,選擇性上傳,服務(wù)器寫(xiě)死亦可
params.put("money", money);// 支付金額,單位:分
params.put("name", goodsName);// 商品名稱
params.put("currencytype", "CNY");// 支付幣種,只能填CNY,代表人民幣

備注:以上是參數(shù)字段是我們公司服務(wù)器定義,給服務(wù)器用以獲取預(yù)支付訂單號(hào)prePayId用。 

備注2:詳細(xì)字段請(qǐng)參考:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1 

2.app服務(wù)器調(diào)用微信“統(tǒng)一下單”接口,得到prePayId訂單號(hào)并返回prePayId給手機(jī)客戶端;

3.手機(jī)客戶端使用prePayId及商品信息調(diào)起微信客戶端進(jìn)行支付;

3.1用戶操作:輸入密碼進(jìn)行支付;返回鍵取消支付;網(wǎng)絡(luò)無(wú)連接支付失敗等;

4.微信客戶端回調(diào)支付結(jié)果給咱們的APP客戶端;

5.微信服務(wù)器異步通知咱們公司app服務(wù)器支付結(jié)果(服務(wù)器的工作,與客戶端無(wú)關(guān))

微信支付代碼:

IWXAPI mWxApi = WXAPIFactory.createWXAPI(mContext, WX_APPID, true);
mWxApi.registerApp(WX_APPID);
      /**
       * 請(qǐng)求app服務(wù)器得到的回調(diào)結(jié)果
       */
      @Override
      public void onGet(JSONObject jsonObject) {
        if (mWxApi != null) {
          PayReq req = new PayReq();

          req.appId = WX_APPID;// 微信開(kāi)放平臺(tái)審核通過(guò)的應(yīng)用APPID
          try {
            req.partnerId = jsonObject.getString("partnerid");// 微信支付分配的商戶號(hào)
            req.prepayId = jsonObject.getString("prepayid");// 預(yù)支付訂單號(hào),app服務(wù)器調(diào)用“統(tǒng)一下單”接口獲取
            req.nonceStr = jsonObject.getString("noncestr");// 隨機(jī)字符串,不長(zhǎng)于32位,服務(wù)器小哥會(huì)給咱生成
            req.timeStamp = jsonObject.getString("timestamp");// 時(shí)間戳,app服務(wù)器小哥給出
            req.packageValue = jsonObject.getString("package");// 固定值Sign=WXPay,可以直接寫(xiě)死,服務(wù)器返回的也是這個(gè)固定值
            req.sign = jsonObject.getString("sign");// 簽名,服務(wù)器小哥給出,他會(huì)根據(jù):https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=4_3指導(dǎo)得到這個(gè)
          } catch (JSONException e) {
            e.printStackTrace();
          }
          mWxApi.sendReq(req);
          Log.d("發(fā)起微信支付申請(qǐng)");
        }

      }

在app包下新建wxapi包,比如app包名為com.xiongit.app,那個(gè)新建的包路徑為com.xiongit.app.wxapi,該包下新建WXPayEntryActivity,繼承自任意Activity。該Activity用以接收支付結(jié)果回調(diào),清單聲明此Activity的格式為

<activity
    android:name=".wxapi.WXPayEntryActivity"
    android:exported="true"
    android:launchMode="singleTop"/>

WXPayEntryActivity代碼示例

public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler{

  private static final String TAG = "MicroMsg.SDKSample.WXPayEntryActivity";

  private IWXAPI api;
  private static final String APP_ID = "your app id";

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.pay_result);

    api = WXAPIFactory.createWXAPI(this, APP_ID);
    api.handleIntent(getIntent(), this);
  }

  @Override
  protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    setIntent(intent);
    api.handleIntent(intent, this);
  }

  @Override
  public void onReq(BaseReq req) {
  }

  /**
   * 得到支付結(jié)果回調(diào)
   */
  @Override
  public void onResp(BaseResp resp) {
    Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);// 支付結(jié)果碼
  }
}

回調(diào)中errCode值列表:

0 支付成功

-1 發(fā)生錯(cuò)誤 可能的原因:簽名錯(cuò)誤、未注冊(cè)APPID、項(xiàng)目設(shè)置APPID不正確、注冊(cè)的APPID與設(shè)置的不匹配、其他異常等。

-2 用戶取消 發(fā)生場(chǎng)景:用戶不支付了,點(diǎn)擊取消,返回APP。

清單menifest申明所需權(quán)限

 <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

備注:支付結(jié)果最終以app服務(wù)器的得到的異步通知為準(zhǔn)。

微信SDK混淆

-keep class com.tencent.mm.sdk.** {
  *;
}

update 20160704

當(dāng)支付時(shí),微信尚未登錄,得不到任何回調(diào),如果調(diào)起支付時(shí)有彈窗進(jìn)度框,并且你想在得到響應(yīng)碼后讓它消失是行不通的,需要在跳出的onStop中處理進(jìn)度條,不然未登錄并且用戶取消了支付時(shí)進(jìn)度條無(wú)法消失。

update 20160722

當(dāng)支付時(shí),WXPayEntryActivity會(huì)以透明的形式啟動(dòng),所以你可能需要在支付完成得到支付響應(yīng)碼后手動(dòng)finish該activity,不然你自己寫(xiě)的支付頁(yè)面的activity需要返回兩次才能退出,因?yàn)榈谝淮伟聪耣ack鍵實(shí)際是finish掉WXPayEntryActivity.第二次才是你自己的activity.

完事了,祝各位集成微信支付成功!

最后附上微信官方支付demo下載:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=11_1,吐槽語(yǔ):官方demo下載藏的有點(diǎn)深。。。開(kāi)放平臺(tái)居然沒(méi)有提供下載,放在微信支付商戶平臺(tái)。

相關(guān)文章

最新評(píng)論

汤原县| 金堂县| 通城县| 郸城县| 黄冈市| 汽车| 射阳县| 平潭县| 三台县| 尼木县| 水城县| 嘉鱼县| 无为县| 宾阳县| 台湾省| 昌江| 阿尔山市| 绵阳市| 六安市| 临汾市| 白河县| 同德县| 扶风县| 丘北县| 白城市| 和龙市| 嘉荫县| 花莲市| 天祝| 鱼台县| 徐水县| 曲麻莱县| 吉木萨尔县| 安宁市| 安乡县| 新竹县| 利津县| 广德县| 平陆县| 桑植县| 乐都县|