微信支付:
1.添加依賴:
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
2. 報名下建文件夾wxapi
.
3.
我這裏是有一個分享的回調 不用管那個 支付需要的是WXPayEntryActivity這個
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
private Context context = this;
private IWXAPI api;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
api = WXAPIFactory.createWXAPI(this, ConstUtils.WXID);
api.handleIntent(getIntent(), this);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
api.handleIntent(intent, this);
}
@Override
public void onReq(BaseReq baseReq) {
}
@Override
public void onResp(BaseResp resp) {
Log.e("=====", resp.errCode + "");
if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
if (resp.errCode == 0) {
Toast.makeText(this, "支付成功", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(this, "支付失敗", Toast.LENGTH_LONG).show();
}
finish();
}
}
}
4.在Androidmanifest中:
<activity
android:name=".wxapi.WXPayEntryActivity"
android:exported="true"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="你的APPID" />
</intent-filter>
</activity>
5.調用
IWXAPI api = WXAPIFactory.createWXAPI(TestActivity.this, ConstUtils.WXID);//AppId
PayReq req = new PayReq();
req.appId = response.body().getAppid();
req.partnerId = response.body().getPartnerid();
req.prepayId = response.body().getPrepayid();
req.nonceStr = response.body().getNoncestr();
req.timeStamp = response.body().getTimestamp();
req.packageValue = "Sign=WXPay";
req.sign = response.body().getSign();//簽名後天返回的
// 在支付之前,如果應用沒有註冊到微信,應該先調用IWXMsg.registerApp將應用註冊到微信
api.registerApp(ConstUtils.WXID);
api.sendReq(req);
微信支付結束 其實都集成過好幾次了 還是遇到了坑 後臺那邊選擇了沙箱環境 轉成爲正式就沒有問題了
支付寶支付:
導入支付寶 SDK
下載地址:https://download.csdn.net/download/mr___xu/10906070 (或者到官網下載)
一、將 alipaySdk-15.5.7-20181023110917.aar
包放在您的應用工程的 libs
目錄下(圖片中文件名僅做示例,請以實際 SDK 文件名爲準):
二、在您主項目的 build.gradle
中,添加下面的內容,將 libs
目錄作爲依賴倉庫:
allprojects {
repositories {
// 添加下面的內容
flatDir {
dirs 'libs'
}
// ... jcenter() 等其他倉庫
}
}
三、在您 App Module 的 build.gradle 中,添加下面的內容,將支付寶 SDK 作爲項目依賴:
dependencies {
// 添加下面的內容
compile (name: 'alipaySdk-15.5.7-20181023110917', ext: 'aar')
}
至此,支付寶 SDK 開發資源導入完成。
申請運行時權限
android.permission.INTERNET
android.permission.ACCESS_NETWORK_STATE
android.permission.ACCESS_WIFI_STATE
android.permission.READ_PHONE_STATE
android.permission.WRITE_EXTERNAL_STORAGE
支付接口調用
PayTask對象主要爲商戶提供訂單支付、查詢功能,及獲取當前開發包版本號。
獲取PayTask支付對象調用支付(支付行爲需要在獨立的非ui線程中執行),代碼示例:
final String orderInfo = info; // 訂單信息
Runnable payRunnable = new Runnable() {
@Override
public void run() {
PayTask alipay = new PayTask(DemoActivity.this);
String result = alipay.payV2(orderInfo,true);
Message msg = new Message();
msg.what = SDK_PAY_FLAG;
msg.obj = result;
mHandler.sendMessage(msg);
}
};
// 必須異步調用
Thread payThread = new Thread(payRunnable);
payThread.start();
支付結果獲取和處理
調用pay方法支付後,將通過2種途徑獲得支付結果:
同步返回
商戶應用客戶端通過當前調用支付的Activity的Handler對象,通過它的回調函數獲取支付結果。(可參考alipay_demo實現)
代碼示例:
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
Result result = new Result((String) msg.obj);
Toast.makeText(DemoActivity.this, result.getResult(),
Toast.LENGTH_LONG).show();
};
};
異步通知
商戶需要提供一個http協議的接口,包含在請求支付的入參中,其key對應notify_url。支付寶服務器在支付完成後,會以POST方式調用notify_url傳輸數據。
獲取當前開發包版本號
調用PayTask對象的getVersion()方法查詢。
代碼示例:
PayTask payTask = new PayTask(activity);
String version = payTask.getVersion();