亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android第三方微信支付教程

 更新時(shí)間:2016年08月04日 11:02:05   投稿:lijiao  
這篇文章主要為大家詳細(xì)介紹了Android第三方微信支付教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

做了微信支付,下載了Demo,發(fā)現(xiàn)和之前有所改動(dòng),v3.0的版本,也許有的朋友還在摸索,這里我已經(jīng)成功支付,話不多說,直接進(jìn)入主題:

一、首先要在微信開發(fā)平臺(tái)注冊(cè)賬號(hào),新增應(yīng)用,填寫正確的包名,正確的簽名(MD5中的一串字符冒號(hào)去掉,全部小寫),當(dāng)然也會(huì)生成的AppID和AppSecret都有用!最后還要花300大洋開通支付功能!

二、分析一下微信支付的流程


三、界面交互流程

這里寫圖片描述

上面都看明白了,接下來就是寫代碼了

四、這里必須要有wxapi這個(gè)包名,同時(shí)必須有WXPayEntryActivity這個(gè)類名

這里寫圖片描述

五、在AndroidManifest.xml里面配置相關(guān)信息

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

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

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

 <!-- 啟動(dòng)主頁(yè)面 -->
    <activity
      android:name=".ui.activity.MainActivity"
      android:label="@string/app_name" >
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
      <intent-filter>
        <action android:name="android.intent.action.VIEW" />

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

        <data android:scheme="wx487898a262d23df3" />
      </intent-filter>
    </activity>


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

    <receiver
      android:name=".wxpay.AppRegister"
      android:permission="com.tencent.mm.plugin.permission.SEND" >
      <intent-filter>
        <action android:name="com.tencent.mm.plugin.openapi.Intent.ACTION_REFRESH_WXAPP" />
      </intent-filter>
    </receiver>

  /**
   * 首先調(diào)用接口,要把一些基本信息作為參數(shù)傳給服務(wù)器
   * 比如:金額fee,用戶id,標(biāo)題title等
   * 調(diào)用成功之后會(huì)返回微信所需要的參數(shù),如:
   * appid,noncestr,package,partnerid,prepayid,
   * timestamp,sign
   * 微信支付
   */
  StringBuffer sb = new StringBuffer();
  WeixinPay wpay;
  private AlertDialog mDialog;
  private AlertDialog.Builder builder;

  public void weixinPay() {
    // 通過WXAPIFactory工廠,獲取IWXAPI的實(shí)例
    api = WXAPIFactory.createWXAPI(this, Constants.APP_ID);
    // 將該app注冊(cè)到微信
    api.registerApp(Constants.APP_ID);
    // 調(diào)用接口
    Params p = new Params();
    p.put("fee",fee);
    p.put("spbill_create_ip", NetWorkUtils.getLocalIpAddress(this));
    String value = "商品標(biāo)題 " + title;
    try {
      String title = new String(value.getBytes("UTF-8"));
      p.put("body", title);
    } catch (UnsupportedEncodingException e) {
      e.printStackTrace();
    }

    p.put("userId", O.getUser().getId());

    p.post(C.URL.WEIXIN_PAY, new ReHandler() {

      @Override
      public void onSuccess(NetEntity entity) {

        wpay = entity.toObj(WeixinPay.class);

        PayReq req = new PayReq();
        req.appId = wpay.getAppid();// 微信appId
        req.packageValue = wpay.getPackageValue();// 包
        req.extData = "app data"; // optional
        req.timeStamp = wpay.getTimeStamp();// 時(shí)間戳
        req.partnerId = wpay.getPartnerId();// 商戶號(hào)"
        req.prepayId = wpay.getPrepayId();// 預(yù)支付訂單號(hào)
        req.nonceStr = wpay.getNonceStr();// 隨機(jī)字符串
        req.sign = wpay.getSign();// 后臺(tái)返回的簽名

        // 本地再次簽名
        List<NameValuePair> signParams = new LinkedList<NameValuePair>();
        signParams.add(new BasicNameValuePair("appid", req.appId));
        signParams.add(new BasicNameValuePair("noncestr", req.nonceStr));
        signParams.add(new BasicNameValuePair("package",req.packageValue));
        signParams.add(new BasicNameValuePair("partnerid",req.partnerId));
        signParams.add(new BasicNameValuePair("prepayid", req.prepayId));
        signParams.add(new BasicNameValuePair("timestamp",req.timeStamp));
        req.sign = genAppSign(signParams);

        // 調(diào)微信支付
        if(api.isWXAppInstalled()&&api.isWXAppSupportAPI()){
          api.sendReq(req);
        }else{
          builder = new AlertDialog.Builder(WXPayEntryActivity.this);
          builder.setNeutralButton("關(guān)閉",
              new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                  mDialog.dismiss();
                }
              }).setTitle("友情提醒").setMessage("請(qǐng)安裝微信客戶端");

          mDialog = builder.create();
          mDialog.show();
        }

      }

      @Override
      public void onStart() {

      }

      @Override
      public void onFailure(String message) {
      }
    });
  }

  private String genAppSign(List<NameValuePair> params) {
    StringBuilder sb = new StringBuilder();

    for (int i = 0; i < params.size(); i++) {
      sb.append(params.get(i).getName());
      sb.append('=');
      sb.append(params.get(i).getValue());
      sb.append('&');
    }
    sb.append("key=");
    sb.append(Constants.API_KEY);

    this.sb.append("sign str\n" + sb.toString() + "\n\n");
    String appSign = MD5.getMessageDigest(sb.toString().getBytes());
    Log.e("orion", appSign);
    return appSign;
  }

六、在WXPayEntryActivity類里面成功之后回調(diào)方法onResp()

@Override
  public void onResp(BaseResp resp) {
    Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);

    if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
      if(resp.errCode==-2){
        Toast.makeText(this,"取消付款!", Toast.LENGTH_LONG).show();
      }
      if(resp.errCode==-1){
        Toast.makeText(this,"支付錯(cuò)誤!", Toast.LENGTH_LONG).show();
      }
      if(resp.errCode==0){
        queryOrder();//查詢接口調(diào)用后臺(tái)服務(wù)器查詢是否成功
      }

    }

最后做完之后,一定要簽名打包,這個(gè)是微信的獨(dú)家秘笈,你忘了就會(huì)跳出-1,呵呵。

最后總結(jié)一下支付返回-1的情況
1.檢查微信后臺(tái)的簽名,包名是否正確
2.工程是否簽名打包
3.如果之前做過測(cè)試顯示過-1的情況,必須清除微信的清除數(shù)據(jù),重新登錄微信
4.后臺(tái)服務(wù)器是否按照要求第一次簽名,第二次簽名,如果第二次簽名不對(duì),那我們就自己再次簽名一次,我的代碼里面寫了

以上就是微信支付的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android之利用EventBus發(fā)送消息傳遞示例

    Android之利用EventBus發(fā)送消息傳遞示例

    本篇文章主要介紹了Android之利用EventBus進(jìn)行消息傳遞示例。EventBus是一款針對(duì)Android優(yōu)化的發(fā)布/訂閱事件總線,非常具有實(shí)用價(jià)值,需要的朋友可以參考下。
    2017-02-02
  • Android使用URL讀取網(wǎng)絡(luò)資源的方法

    Android使用URL讀取網(wǎng)絡(luò)資源的方法

    這篇文章主要為大家詳細(xì)介紹了Android使用URL讀取網(wǎng)絡(luò)資源的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • TabLayout標(biāo)題文字不顯示的解決操作

    TabLayout標(biāo)題文字不顯示的解決操作

    這篇文章主要介紹了TabLayout標(biāo)題文字不顯示的解決操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Android開發(fā)從相冊(cè)中選取照片的示例代碼

    Android開發(fā)從相冊(cè)中選取照片的示例代碼

    這篇文章主要介紹了Android開發(fā)從相冊(cè)中選取照片的示例代碼,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-09-09
  • Android使用LinearLayout設(shè)置邊框

    Android使用LinearLayout設(shè)置邊框

    這篇文章主要介紹了Android如何使用LinearLayout設(shè)置邊框,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • Android自定義帶動(dòng)畫效果的圓形ProgressBar

    Android自定義帶動(dòng)畫效果的圓形ProgressBar

    這篇文章主要為大家詳細(xì)介紹了Android自定義帶動(dòng)畫效果的圓形ProgressBar,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • Android ProgressBar組件使用教程

    Android ProgressBar組件使用教程

    Android ProgressBar分為水平進(jìn)度條和圓形進(jìn)度條, 看官方的劃分是Indeterminate Progress(不確定的進(jìn)度) 和 Determinate Progress(決定進(jìn)度)下面有2個(gè)demo一個(gè)是圓形的進(jìn)度條和一個(gè)水平的進(jìn)度條
    2022-11-11
  • 基于android示例程序(bitmapfun) 高效加載圖片讓人無(wú)語(yǔ)地方

    基于android示例程序(bitmapfun) 高效加載圖片讓人無(wú)語(yǔ)地方

    嘗試了使用git上的一個(gè)開源項(xiàng)目afinal(bitmapfun的封裝版)來加載圖片,但是在測(cè)試的時(shí)候發(fā)現(xiàn)了一個(gè)問題,新的圖片加載器(bitmapfun)比之前用的ImageDownloader要慢很多,特別是在網(wǎng)絡(luò)狀況不好的時(shí)候,那簡(jiǎn)直是太讓人無(wú)語(yǔ)了
    2013-04-04
  • ViewDragHelper實(shí)現(xiàn)QQ側(cè)滑效果

    ViewDragHelper實(shí)現(xiàn)QQ側(cè)滑效果

    這篇文章主要為大家詳細(xì)介紹了ViewDragHelper實(shí)現(xiàn)QQ側(cè)滑效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • 解決Android Studio4.1沒有Gsonfomat插件,Plugin “GsonFormat” is incompatible的問題

    解決Android Studio4.1沒有Gsonfomat插件,Plugin “GsonFormat” is inco

    這篇文章主要介紹了解決Android Studio4.1沒有Gsonfomat插件,Plugin “GsonFormat” is incompatible (supported only in IntelliJ IDEA)的問題 ,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-12-12

最新評(píng)論