微信支付功能

    微信支付步驟及賬號部分在微信相關功能中體現,此處不再贅述:微信相關功能

    賬號註冊號之後創建APP基本信息,APP信息,注意包名與簽名填寫必須正確。

    下面進入功能集成部分

    寫在之前:微信支付因爲安全以及後期需求問題,需要與後臺相協作來共同完成支付的過程,APP端負責業務流程,下單由後臺向微信服務器發起,所以支付的流程如下(就開發而言簡化):

 拿到預付款訂單信息之後調起微信支付就可以了。

 1、資源集成,兩種方式:

    1)下載資源集成(已經不再推薦,最新的下載鏈接連接到的是Jcenter)。

    地址:微信資源下載

    下載之後解壓得到  libammsdk.jar集成到項目中並進行依賴即可

   2)gradle方式集成。

dependencies {
    compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
}

或者

dependencies {
    compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
}

第一個包含統計功能,第二個不包含統計功能。

2、權限註冊:

    在Manifests進行相關的權限註冊如下:

<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"/>

3、將APP註冊到微信(注意將appId替換成你自己註冊的AppId):

IWXAPI weixinAPI=WXAPIFactory.createWXAPI(this, 'appiId', true);
weixinAPI.registerApp('appId');

4、微信支付的發起:

(具體參考微信支付開發文檔

1)調用後臺接口拿到相關的信息(預付款id等)

2)發起支付:

  PayReq request = new PayReq();
                request.appId = ‘appId’;
                request.partnerId = ‘商戶id’;
                request.prepayId = ‘預付款訂單id’;
                request.packageValue = "Sign=WXPay";
                request.nonceStr = ‘隨機字符串’;
                request.timeStamp = ‘時間戳’;
                request.sign = ‘簽名’;
   WeixinAPI.sendReq(request);

3)參數說明:

應用ID                 appid         String(32)          wx8888888888888888 微信開放平臺審覈通過的應用APPID
商戶號                 partnerid         String(32)         1900000109 微信支付分配的商戶號
預支付交易會話ID prepayid         String(32)         WX1217752501201407033233368018 微信返回的支付交易會話ID
擴展字段                 package         String(128) Sign=WXPay 暫填寫固定值Sign=WXPay
隨機字符串         noncestr         String(32)         5K8264ILTKCH16CQ2502SI8ZNMTM67VS 隨機字符串,不長於32位。推薦隨機數生成算法
時間戳                 timestamp String(10)          1412000000 時間戳,請見接口規則-參數規定
簽名                         sign                 String(32)          C380BEC2BFD727A4B6845133519F3AD6 簽名,詳見簽名生成算法注意:簽名方式一定要與統一下單接口使用的一致

5、微信支付結果的接收:

新建Activity如下(注意在Manifest註冊):

import com.orhanobut.logger.Logger;
import com.tencent.mm.sdk.constants.ConstantsAPI;
import com.tencent.mm.sdk.modelbase.BaseReq;
import com.tencent.mm.sdk.modelbase.BaseResp;
import com.tencent.mm.sdk.modelpay.PayResp;
import com.tencent.mm.sdk.openapi.IWXAPIEventHandler;
import com.weili.jinjin.pigeonracing.app.PigeonApp;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {

    private static final String TAG = "WXPayEntryActivity";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        WeixinAPI.handleIntent(getIntent(), this);
    }

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

    @Override
    public void onReq(BaseReq req) {
    }

    @Override
    public void onResp(BaseResp resp) {
//        if (resp instanceof PayResp) {
//            Logger.e(TAG, "1-支付回調");
//            PayResp resp1 = (PayResp) resp;
//            switch (resp.errCode) {
//                case BaseResp.ErrCode.ERR_OK:
//                    Logger.e(TAG, "1-支付成功");
//                    break;
//                case BaseResp.ErrCode.ERR_USER_CANCEL:
//                    Logger.e(TAG, "1-支付取消");
//                    break;
//                case BaseResp.ErrCode.ERR_AUTH_DENIED:
//                    Logger.e(TAG, "1-支付拒絕");
//                    break;
//                default:
//                    Logger.e(TAG, "1-支付返回");
//                    break;
//            }
//        }
        if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
            Logger.e(TAG, "支付回調");
            switch (resp.errCode) {
                case BaseResp.ErrCode.ERR_OK:
                    Logger.e(TAG, "支付成功");
                    break;
                case BaseResp.ErrCode.ERR_USER_CANCEL:
                    Logger.e(TAG, "支付取消");
                    break;
                case BaseResp.ErrCode.ERR_AUTH_DENIED:
                    Logger.e(TAG, "支付拒絕");
                    break;
                default:
                    Logger.e(TAG, "支付返回");
                    break;
            }
        }
        finish();
    }
}
 <activity
            android:name=".wxapi.WXPayEntryActivity"
            android:exported="true"
            android:launchMode="singleTop"
            android:label="@string/app_name"/>
6、根據收到的回調結果進行展示就可以了,但是此處的結果僅供參考,具體結果以後臺的異步回調爲準。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章