L-Platform微信支付宝支付、小程序分享、常用登录分享的封装库

前言

qq微信新浪支付宝等平台的开放sdk是app开发中常用到的第三方库,主要实现支付分享登录等功能,目前已有一些平台对这些sdk进行了很好的封装。例如友盟的社会化组件。但是在使用第三方封装的库时总会遇到一些问题,例如:参数配置复杂,包太大等问题。于是我抽取这三个常用的平台sdk包做了一个简单的封装,旨在提供原始SDK功能,和最简化的配置即可使用这些SDk

L-Platform功能介绍

支付

1.支付宝支付 : 包含本地生成订单发起支付,以及使用服务器生成好的订单发起支付两种模式
2.微信支付:包含本地请求生成预支付订单请求再发起支付,以及服务端请求生成预支付订单信息返回后发起支付

分享
  1. 普通分享: 包括分享到微信好友微信朋友圈qq好友qq空间新浪微博
  2. 小程序分享: 包括分享小程序小卡片给好友,直接打开微信小程序
  3. 微信朋友圈多图分享:该功能会直接打开微信朋友圈的编辑界面,让你像平时发朋友圈那样发。
登录
  1. 微信登录: 打开微信授权界面登录
  2. qq登录: 打开qq授权界面登录

导入配置

app-> build.gradle

android {
    defaultConfig {        
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = [appid: applicationId]
            }
        }
   }
}

dependencies {
    ...
    implementation 'com.lu.lib:lplatform:1.0.2'
    annotationProcessor 'com.lu.lib:lplatform-processor:1.0'
}

AndroidManifest.xml

  
        
        
        
        
        
        
            
                

                
                
                
                
            
        

将上述配置导入项目中即可开始使用,在项目源码的demo里也有详细的使用方式

配置各个平台参数

//下面的初始化配置为各自平台的信息
//第一个参数都是appid,第二个参数是app_secret,第三个参数是新浪需求的redirect_url
//如果不需要调用某个平台的sdk,不配置参数即可
public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        //下面的初始化配置为各自平台的信息
        PlatformConfigurator.getInstance()
                .isDebug(BuildConfig.DEBUG)
                .withContext(this)
                .setSINAConfig("", "", "")
                .setQQConfig("", "")
                .setMiniProgramConfig("")
                .setWXConfig("", "")
                .initialize();
    }
}

支付

通常支付仅对微信支付宝进行开发

支付代码示例
 public class PayDemoActivity extends AppCompatActivity implements PayObserver {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pay_demo);
        //注册用于监听支付的回调
        PayObservable.getInstance().register(this);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        PayObservable.getInstance().unRegister(this);
    }

    /**
     * 在本地对支付的一些参数进行处理生成orderInfo
     *
     * @param v
     */
    public void localAliPay(View v) {
        //业务数据的包装类   参数含义查看该BizContent类
        BizContent bizContent = new BizContent();
        bizContent.setTotal_amount("");
        bizContent.setProduct_code("");
        bizContent.setTimeout_express("");
        bizContent.setBody("");
        bizContent.setSubject("");
        bizContent.setOut_trade_no("");

        new AliPayUtil.Builder(this)
                .setAPPID("")
                .setRSA_PRIVATE("")
                .setBiz_content(bizContent)
                .setNotify_url("")
                .build()
                .pay();
    }

    /**
     * 支付宝支付真正发起请求时只需要一个经过加密的订单信息字符串orderInfo,这个字符串可以由服务器生成,也可以在本地生成
     *
     * @param v
     */
    public void remoteAliPay(View v) {
        //这个orderInfo应该由服务器生成好返回到客户端,这里只写作伪代码。
        final String orderInfo = "";
        //客户端直接传入orderInfo字符串到支付宝sdk发起请求
        new AliPayUtil.Builder(this)
                .setOrderInfo(orderInfo)
                .build()
                .pay();
    }

    /**
     * 由本地完成预支付订单和支付两个步骤
     *
     * @param v
     */
    public void localWeiXinPay(View v) {
        //参数细节查看WXPrePayUtil.Builder类
        new WXPrePayUtil.Builder()
                .setContext(this)
                .setApp_secret("secret")//微信商户后台可以拿到的私钥
                .setAppid("appid")
                .setBody("body")
                .setMch_id("")
                .setNotify_url("")
                .setOut_trade_no("")
                .setTotal_fee("")
                .setSpbill_create_ip("")
                .build()
                .startPrePay();
    }

    /**
     * 如果由服务器发起预支付生成订单   那么下列的参数应该由服务器返回到客户端,客户端发起支付
     *
     * @param v
     */
    public void remoteWeiXinPay(View v) {
        new WXPayUtil.Builder()
                .setContext(this)
                .setAppid("appid")//appid
                .setNoncestr("noncestr")//随机字符串
                .setPartnerid("partnerid")//商户id
                .setPrepayid("prepayid")//预支付订单号
                .setSign("sign")//服务器对参数按照微信要求的形式加密后返回的验签
                .setTimestamp("timestamp")//时间戳
                .setPackageValue("Sign=WXPay")//固定值"Sign=WXPay"
                .build()
                .pay();
    }

    @Override
    public void onPaySuccess(String payType, String resultMessage) {
        //支付成功
        if (payType.equalsIgnoreCase(Constants.ALI)) {
            //支付宝支付成功
        } else if (payType.equalsIgnoreCase(Constants.WEIXIN)) {
            //微信支付成功
        }
    }

    @Override
    public void onPayFailed(String payType, String errorMessage) {
        //支付失败
    }
}

示例代码中分别展示了四种支付流程的使用,通常一种支付方式只会使用其中的一种,要么在本地生成订单信息,要么在服务器生成订单信息。

分享

分享的弹窗我已写好,分享的按钮会根据配置的平台信息自动添加

image.png

    /**
     * 普通分享  目前仅支持  微信,qq,微博3种分享
     *
     * @param v
     */
    public void normalShare(View v) {
        ShareParams params = new ShareParams.Builder()
                .setTitle("测试")
                .setText("测试内容")
                .setUrl("http://www.baidu.com")
                .setSimpleImage("http://p83nf214c.bkt.clouddn.com/1525416286.jpg")
                .build();

        ShareUtil.doShare(this, params);
    }
    /**
     * 分享小程序卡片
     *
     * @param v
     */
    public void shareMiniProgram(View v) {
        ShareParams params = new ShareParams.Builder()
                .setTitle("测试")
                .setText("测试内容")
                .setUrl("http://www.baidu.com")
                .setPagePath("pages/index")
                .setSimpleImage("http://p83nf214c.bkt.clouddn.com/1525416286.jpg")
                .build();
        ShareUtil.shareMiniProgram(params);
    }

    /**
     * 打开小程序
     *
     * @param v
     */
    public void openMiniProgram(View v) {
        //path填写要打开的小程序页面
       ShareUtil.openMiniProgram("pages/index");
    }

详细的代码和注释ShareDemoActivity中,包括回调监听等,这里就不贴出代码

登录

登录的界面弹窗类似分享,我也已经写好了


//执行登录只需要调用这句代码即可
//首次登录只需要new 一个LoginObj即可,在第一次登录成功后获取到了openid等信息,下一次登录即可设置这些信息,sdk内部会判断这些信息的有效性,如果有效则返回成功并更新信息,不会调起授权界面
LoginObj loginObj = new LoginObj();
LoginUtil.doLogin(this,loginObj);



//成功的回调,登录成功后会返回一个LoginObj  这个对象包含了openid,access_token等信息,拿到这些信息后应该做持久化处理,再下一次登录时携带这些信息

@Override
public void loginSuccess(String platformType, LoginObj obj) {
    this.loginObj = obj;
    //获取到这些值之后需要保存起来,建议上传到服务器
}

总结

这个库的配置是非常简单的,对于令人头疼的微信支付回调包名限制问题,通过注解处理器自动生成的方式成功的解决了。这里介绍的使用方法如果不懂,可以前往观看demo,代码也是非常简洁而且都做了注释。

源码地址

你可能感兴趣的:(L-Platform微信支付宝支付、小程序分享、常用登录分享的封装库)