AndroidPay
功能介紹
1.微信支付、登錄、分享功能
2.支付寶支付、授權登錄(極簡版+完整版本)功能
3.銀聯支付功能
軟件架構
只要採用Builder模式
使用說明
方法一 JitPack依賴
A.在項目下的build.gradle配置如下
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
B.在項目app文件夾下的build.gradle配置如下
dependencies {
implementation 'com.github.RelinRan:AndroidPay:1.0.11'
}
方法二 ARR依賴
android {
....
repositories {
flatDir {
dirs 'libs'
}
}
}
dependencies {
implementation(name: 'AndroidPay', ext: 'aar')
}
1. 微信支付
A.需要在項目新建wxapi文件夾,然後新建WXPayEntryActivity.java文件,繼承WeChatPayActivity
public class WXPayEntryActivity extends WeChatPayActivity {}
B.AndroidManifest.xml配置
<activity
android:name=".wxapi.WXPayEntryActivity"
android:exported="true"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:theme="@style/Android.Theme.Light.NoActionBar" />
C.支付調用
WeChatPay.Builder builder = new WeChatPay.Builder(this);
builder.appId("xxxx");
builder.partnerId("xxx");
builder.prepayId("xxx");
builder.nonceStr("xxxx");
builder.timeStamp("xxxx");
builder.packageValue("Sign=WXPay");
builder.sign("xxxx");
builder.listener(new OnWeChatPayListener() {
@Override
public void onWeChatPay(int code,String msg) {
if(code==WeChatConstants.SUCCEED){//支付成功
}
if(code==WeChatConstants.CANCEL){//用戶取消
}
if(code==WeChatConstants.FAILED){//支付失敗
}
}
});
builder.extData(xxxxx);//支付提示文字
builder.build();
2. 支付寶支付
A.AndroidManifest.xml配置
AndroidManifest.xml非必要配置(項目本身或者其他arr沒有配置org.apache.http.legacy的情況之下需要):
<uses-library
android:name="org.apache.http.legacy"
android:required="false" />
B.支付調用
AliPay.Builder builder = new AliPay.Builder(this);
builder.orderInfo("xxxx");
builder.listener(new OnAliPayListener() {
/**
* 參數解釋
*
* @param status 是結果碼(類型爲字符串)。
* 9000 訂單支付成功
* 8000 正在處理中,支付結果未知(有可能已經支付成功),請查詢商戶訂單列表中訂單的支付狀態
* 4000 訂單支付失敗
* 5000 重複請求
* 6001 用戶中途取消
* 6002 網絡連接出錯
* 6004 支付結果未知(有可能已經支付成功),請查詢商戶訂單列表中訂單的支付狀態
* 其它 其它支付錯誤
* @param json 是處理結果(類型爲json結構字符串)
* out_trade_no String 是 64 商戶網站唯一訂單號 70501111111S001111119
* trade_no String 是 64 該交易在支付寶系統中的交易流水號。最長64位。 2014112400001000340011111118
* app_id String 是 32 支付寶分配給開發者的應用Id。 2014072300007148
* total_amount Price 是 9 該筆訂單的資金總額,單位爲RMB-Yuan。取值範圍爲[0.01,100000000.00],精確到小數點後兩位。 9.00
* seller_id String 是 16 收款支付寶賬號對應的支付寶唯一用戶號。以2088開頭的純16位數字 2088111111116894
* msg String 是 16 處理結果的描述,信息來自於code返回結果的描述 success
* charset String 是 16 編碼格式 utf-8
* timestamp String 是 32 時間 2016-10-11 17:43:36
* code String 是 16 結果碼 具體見
* @param description description是描述信息(類型爲字符串)
*/
@Override
public void onAliPay(String status, String json, String description) {
if(status.equals("9000")){//成功
}
else if(status.equals("6001")){//用戶取消
}
else{//支付失敗
}
}
});
builder.loading(true);
builder.build();
3.銀聯支付
UUPay uuPay = new UUPay(this);
uuPay.pay(tn,UUPay.PayMode.FORM);
4.微信登錄
A.需要在項目新建wxapi文件夾,然後新建WXEntryActivity.java文件,繼承WeChatAuthActivity
public class WXEntryActivity extends WeChatAuthActivity {
}
B.AndroidManifest.xml配置
<activity
android:name=".wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:theme="@android:style/Theme.Translucent.NoTitleBar">
</activity>
C.微信登錄代碼
WeChatLogin.Builder builder = new WeChatLogin.Builder(context);
builder.appId("xxx");
builder.appSecret("xxx");
builder.listener(new OnWXLoginListener() {
@Override
public void onWeChatLogin(int code, String msg, WeChatUser user) {
if (code==WeChatConstants.LOADING){//登錄中
}
if (code==WeChatConstants.SUCCEED){//登錄成功
}
if (code==WeChatConstants.CANCEL){//用戶取消登錄
}
if (code==WeChatConstants.AUTH_DENIED){//授權取消
}
}
});
builder.build();
5.支付寶登錄(官方文檔)
授權登錄回調onAliLogin(int code, String memo, AliUser aliUser)回調返回code值如下:
- AliLogin.OK = 9000 (調用成功)
- AliLogin.Duplex = 5000 (3s內快速發起了多次支付 / 授權調用。稍後重試即可。)
- AliLogin.NOT_INSTALLED = 4001(用戶未安裝支付寶 App。)
- AliLogin.SYS_ERR = 4000(其它錯誤,如參數傳遞錯誤。)
- AliLogin.CANCEL = 6001(用戶取消)
- AliLogin.NET_ERROR = 6002(網絡連接出錯)
1.極簡版授權(官方文檔)
A.在項目AndroidManifest.xml配置如下(注意:這個需要自己配置,最好是自己應用包名)
<activity android:name="com.alipay.sdk.app.AlipayResultActivity" tools:node="merge">
<intent-filter tools:node="replace">
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="xxxxxxxxxx"/>
</intent-filter>
</activity>
B.支付寶登錄代碼
AliLogin.Builder builder = new AliLogin.Builder(this);
builder.appId("xxxxx");
builder.scheme("xxxxxx");//必須跟AndroidManifest.xml配置一致
builder.listener(new OnAliLoginListener() {
@Override
public void onAliLogin(int code, String memo, AliUser aliUser) {
if (code == AliLogin.OK) {
//處理你的邏輯,極簡版本只有aliUser.getAuthCode()
}
}
});
builder.build();
2.完整版授權(官方文檔)
A.注意:authInfo需要後端提供,爲了安全性。如果後端不提供就是調用OrderInfoUtil工具類如下方法獲取
/**
* 構建授權信息
*
* @param privateKey 私鑰(https://doc.open.alipay.com/docs/doc.htm?treeId=291&articleId=106097&docType=1)
* @param pid 簽約的支付寶賬號對應的支付寶唯一用戶號,以2088開頭的16位純數字組成
* @param app_id支付寶分配給開發者的應用ID
* @param target_id 商戶標識該次用戶授權請求的ID,該值在商戶端應保持唯一
* @param rsa2 簽名類型是否是RSA2,否:RSA
* @return
*/
public static String buildAuthInfo(String privateKey, String pid, String app_id, String target_id, boolean rsa2)
B.授權AndroidManifest.xml配置
<activity
android:name="com.alipay.sdk.app.H5AuthActivity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:exported="false" >
</activity>
<activity
android:name="com.alipay.sdk.app.H5OpenAuthActivity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:exported="false"
android:screenOrientation="behind"
android:windowSoftInputMode="adjustResize|stateHidden" >
</activity>
C.授權調用代碼
AliLogin.Builder builder = new AliLogin.Builder(this);
builder.authInfo("xxxxx");
builder.listener(new OnAliLoginListener() {
@Override
public void onAliLogin(int code, String memo, AliUser aliUser) {
if (code == AliLogin.OK) {
//處理你的邏輯,完整版本有aliUser.getUserId()和aliUser.getAliPayOpenId()
}
}
});
builder.build();
6.微信分享
A.需要在項目新建wxapi文件夾,然後新建WXEntryActivity.java文件,繼承WeChatAuthActivity
public class WXEntryActivity extends WeChatAuthActivity {}
B.微信分享代碼
因爲根據官方文檔集成,其中參數名字也跟官方文檔一致,目前只是加了一個thumUrl和imageUrl不跟官方文檔一致,爲了方便縮略圖和圖片分享使用網絡圖片;
其他的參數參考官方文檔
B-1.圖片分享代碼
WeChatShare.Builder builder = new WeChatShare.Builder(getContext());
builder.type(WeChatShare.TYPE_IMAGE);
builder.appId(Constants.WE_CHAT_APP_ID);
builder.scene(WeChatShare.SCENE_SESSION);
builder.imagePath("本地圖片地址");//或者builder.imageUrl("http://xxxxxx");
builder.listener(new OnWeChatShareListener() {
@Override
public void onWeChatShare(int code, String msg) {
//分享回調,官方目前取消了回調,不管是否正確分享都會進入。
}
});
builder.build();
B-2.視頻分享代碼
WeChatShare.Builder builder = new WeChatShare.Builder(getContext());
builder.type(WeChatShare.TYPE_VIDEO);
builder.appId(Constants.WE_CHAT_APP_ID);
builder.scene(WeChatShare.SCENE_SESSION);
builder.title("標題");
builder.description("描述信息");
builder.thumbImage(bitmap);//或 builder.thumbUrl("http://xxxxxx"); 或builder.thumbData(byte[]);
builder.videoUrl("視頻網絡地址");
builder.listener(new OnWeChatShareListener() {
@Override
public void onWeChatShare(int code, String msg) {
//分享回調,官方目前取消了回調,不管是否正確分享都會進入。
if (code==WeChatConstants.SUCCEED){//成功
}
if (code==WeChatConstants.CANCEL){//取消
}
}
});
builder.build();
B-3.網頁分享代碼
WeChatShare.Builder builder = new WeChatShare.Builder(getContext());
builder.type(WeChatShare.TYPE_WEB);
builder.appId(Constants.WE_CHAT_APP_ID);
builder.scene(WeChatShare.SCENE_SESSION);
builder.title("標題");
builder.description("描述信息");
//縮略圖設置
builder.thumbImage(bitmap);//或 builder.thumbUrl("http://xxxxxx"); 或builder.thumbData(byte[]);
builder.webpageUrl("網絡地址");
builder.listener(new OnWeChatShareListener() {
@Override
public void onWeChatShare(int code, String msg) {
//分享回調,官方目前取消了回調,不管是否正確分享都會進入。
if (code==WeChatConstants.SUCCEED){//成功
}
if (code==WeChatConstants.CANCEL){//取消
}
}
});
builder.build();
B-4.音樂分享代碼
WeChatShare.Builder builder = new WeChatShare.Builder(getContext());
builder.type(WeChatShare.TYPE_MUSIC);
builder.appId(Constants.WE_CHAT_APP_ID);
builder.scene(WeChatShare.SCENE_SESSION);
builder.title("標題");
builder.description("描述信息");
//縮略圖設置
builder.thumbImage(bitmap);//或 builder.thumbUrl("http://xxxxxx"); 或builder.thumbData(byte[]);
builder.musicUrl("網絡地址");
builder.listener(new OnWeChatShareListener() {
@Override
public void onWeChatShare(int code, String msg) {
//分享回調,官方目前取消了回調,不管是否正確分享都會進入。
if (code==WeChatConstants.SUCCEED){//成功
}
if (code==WeChatConstants.CANCEL){//取消
}
}
});
builder.build();