Android 常用支付(支付寶、微信、銀聯)

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依賴

AndroidPay.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值如下:
  1. AliLogin.OK = 9000 (調用成功)
  2. AliLogin.Duplex = 5000 (3s內快速發起了多次支付 / 授權調用。稍後重試即可。)
  3. AliLogin.NOT_INSTALLED = 4001(用戶未安裝支付寶 App。)
  4. AliLogin.SYS_ERR = 4000(其它錯誤,如參數傳遞錯誤。)
  5. AliLogin.CANCEL = 6001(用戶取消)
  6. 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();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章