微信支付步驟及賬號部分在微信相關功能中體現,此處不再贅述:微信相關功能
賬號註冊號之後創建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、根據收到的回調結果進行展示就可以了,但是此處的結果僅供參考,具體結果以後臺的異步回調爲準。