Android 集成微信支付和支付宝支付工具类

1.前言
去年年底接了一个商城app 外包项目,里面尼涉及到 微信和支付宝支付,这里我整理出几个工具类,下面就和大家分享一下,废话不多说,下面我一步一步给大家介绍下。

一、支付宝支付

1.支付宝官方集成文档
2.支付宝官方资源下载

二、微信支付

1.微信官方的集成文档
2.微信官方资源下载

三、下面我直接上代码了哈
首先导入对应支付平台下载的SDK里面的jar

1.PayHelper 支付类:

package com.more.org.utils;import android.app.Activity;import android.os.Handler;import android.os.Message;import android.text.TextUtils;import android.util.Log;import android.widget.Toast;import com.alipay.sdk.app.PayTask;import com.more.org.WEXModel;import com.tencent.mm.opensdk.modelpay.PayReq;import com.tencent.mm.opensdk.openapi.IWXAPI;import com.tencent.mm.opensdk.openapi.WXAPIFactory;import java.util.Map;/** * Created by Administrator on 2017/5/23. * 支付类 */public class PayHelper {    private static PayHelper mPayHelper = null;    public static PayHelper getInstance() {        if (mPayHelper == null) {            mPayHelper = new PayHelper();        }        return mPayHelper;    }    public PayHelper() {    }    IWXAPI msgApi = null;    public void WexPay(WEXModel.ReturnDataBean data) {        if (msgApi == null) {            msgApi = WXAPIFactory.createWXAPI(MyApplication.getInstance(), null);            msgApi.registerApp(Constant.WEXAPPID);// 将该app注册到微信        }        PayReq req = new PayReq();        if (!msgApi.isWXAppInstalled()) {            Toast.makeText(MyApplication.getInstance(), "手机中没有安装微信客户端!", Toast.LENGTH_SHORT).show();            return;        }        if (data != null) {            req.appId = data.getAppid();            req.partnerId = data.getPartnerid();            req.prepayId = data.getPrepayid();            req.nonceStr = data.getNoncestr();            req.timeStamp = data.getTimestamp() + "";            req.packageValue = data.getPackageX();            req.sign = data.getSign();            // req.extData = MaiLiApplication.getInstance().getUserInfo().getPhone();  微信拓展参数            msgApi.sendReq(req);        }    }    public void AliPay(Activity activity, final String orderInfo) {        final PayTask alipay = new PayTask(activity);        Runnable payRunnable = new Runnable() {            @Override            public void run() {                Map result = alipay.payV2(orderInfo, true);                Log.i("msp", result.toString());                Message msg = new Message();                msg.what = 0;                msg.obj = result;                mHandler.sendMessage(msg);            }        };        Thread payThread = new Thread(payRunnable);        payThread.start();    }    private Handler mHandler = new Handler() {        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            switch (msg.what) {                case 0:                    PayResult payResult = new PayResult((Map) msg.obj);                    /**                     对于支付结果,请商户依赖服务端的异步通知结果。同步通知结果,仅作为支付结束的通知。                     */                    String resultInfo = payResult.getResult();// 同步返回需要验证的信息                    String resultStatus = payResult.getResultStatus();                    // 判断resultStatus 为9000则代表支付成功                    if (TextUtils.equals(resultStatus, "9000")) {                        // 该笔订单是否真实支付成功,需要依赖服务端的异步通知。                        if (mIPayListener != null) {                            mIPayListener.onSuccess();                        }                    } else {                        // 该笔订单真实的支付结果,需要依赖服务端的异步通知。                        if (mIPayListener != null) {                            mIPayListener.onFail();                        }                    }                    break;            }        }    };    private IPayListener mIPayListener;    public void setIPayListener(IPayListener mIPayListener) {        this.mIPayListener = mIPayListener;    }    public interface IPayListener {        void onSuccess();        void onFail();    }}

2.PayResult看命名就知道 支付结果类:

package com.more.org.utils;import android.text.TextUtils;import java.util.Map;public class PayResult {    private String resultStatus;    private String result;    private String memo;    public PayResult(Map rawResult) {        if (rawResult == null) {            return;        }        for (String key : rawResult.keySet()) {            if (TextUtils.equals(key, "resultStatus")) {                resultStatus = rawResult.get(key);            } else if (TextUtils.equals(key, "result")) {                result = rawResult.get(key);            } else if (TextUtils.equals(key, "memo")) {                memo = rawResult.get(key);            }        }    }    @Override    public String toString() {        return "resultStatus={" + resultStatus + "};memo={" + memo                + "};result={" + result + "}";    }    /**     * @return the resultStatus     */    public String getResultStatus() {        return resultStatus;    }    /**     * @return the memo     */    public String getMemo() {        return memo;    }    /**     * @return the result     */    public String getResult() {        return result;    }}

3.WXPayEntryActivity类(放在wxapi包名下):

package com.more.org.wxapi;import android.content.Intent;import android.widget.Toast;import com.more.org.BaseActivity;import com.more.org.BasePresenter;import com.more.org.R;import com.more.org.databinding.ActivityPayResultBinding;import com.tencent.mm.opensdk.modelbase.BaseReq;import com.tencent.mm.opensdk.modelbase.BaseResp;import com.tencent.mm.opensdk.openapi.IWXAPI;import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;import com.tencent.mm.opensdk.openapi.WXAPIFactory;public class WXPayEntryActivity extends BaseActivity implements IWXAPIEventHandler {    private static final String TAG = "MicroMsg.SDKSample.WXPayEntryActivity";    private IWXAPI api;//    @Override//    public int getLayoutId() {//        return R.layout.activity_pay_result;//    }////    @Override//    protected boolean isTitleBar() {//        return false;//    }////    @Override//    protected boolean isPrestener() {//        return false;//    }////    @Override//    protected BasePresenter createPresenter() {//        return null;//    }//    @Override    public void initData() {        super.initData();        api = WXAPIFactory.createWXAPI(this, Constant.WEXAPPID);        api.handleIntent(getIntent(), this);      }    @Override    protected void onNewIntent(Intent intent) {        super.onNewIntent(intent);        setIntent(intent);        api.handleIntent(intent, this);    }    @Override    public void onReq(BaseReq req) {    }    @Override    public void onResp(BaseResp resp) {        int code = resp.errCode;        String transaction = resp.transaction;        String errStr = resp.errStr;        if (code == 0) {            mBinding.tvResult.setText("充值成功了!");            //显示充值成功的页面和需要的操作            //EventBus.getDefault().post("微信支付成功");//微信支付成功            Toast.makeText(aty, "充值成功了!", Toast.LENGTH_SHORT).show();        }        if (code == -1) {            //错误    可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。            mBinding.tvResult.setText("充值失败!");            Toast.makeText(aty, "充值失败!", Toast.LENGTH_SHORT).show();        }        if (code == -2) {            mBinding.tvResult.setText("用户取消了!");            Toast.makeText(aty, "用户取消了!", Toast.LENGTH_SHORT).show();            //用户取消        }       // finish();    }}

4.WEXModel实体类:(根据自己服务器返回的数据定义)

package com.more.org;import com.google.gson.annotations.SerializedName;import java.io.Serializable;import java.util.List;/** * Created by Administrator on 2017/5/23. */public class WEXModel implements Serializable {    /**     * ReturnCode : 1     * ReturnMessage :     * ReturnData : 服务器返回的josn数据     */    private String ReturnCode;    private String ReturnMessage;    private List ReturnData;    public String getReturnCode() {        return ReturnCode;    }    public void setReturnCode(String ReturnCode) {        this.ReturnCode = ReturnCode;    }    public String getReturnMessage() {        return ReturnMessage;    }    public void setReturnMessage(String ReturnMessage) {        this.ReturnMessage = ReturnMessage;    }    public List getReturnData() {        return ReturnData;    }    public void setReturnData(List ReturnData) {        this.ReturnData = ReturnData;    }    public static class ReturnDataBean {        /**         * appid : //对应的参数后台返回         * partnerid :          * prepayid :          * package : Sign=WXPay         * noncestr :          * timestamp : 1521789303         * sign :          */        private String appid;        private String partnerid;        private String prepayid;        @SerializedName("package")        private String packageX;        private String noncestr;        private String timestamp;        private String sign;        public String getAppid() {            return appid;        }        public void setAppid(String appid) {            this.appid = appid;        }        public String getPartnerid() {            return partnerid;        }        public void setPartnerid(String partnerid) {            this.partnerid = partnerid;        }        public String getPrepayid() {            return prepayid;        }        public void setPrepayid(String prepayid) {            this.prepayid = prepayid;        }        public String getPackageX() {            return packageX;        }        public void setPackageX(String packageX) {            this.packageX = packageX;        }        public String getNoncestr() {            return noncestr;        }        public void setNoncestr(String noncestr) {            this.noncestr = noncestr;        }        public String getTimestamp() {            return timestamp;        }        public void setTimestamp(String timestamp) {            this.timestamp = timestamp;        }        public String getSign() {            return sign;        }        public void setSign(String sign) {            this.sign = sign;        }    }}

5.AndroidManifest清单文件配置相关信息:

1.添加必要权限

<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" />

2.注册信息

               <activity            android:name="com.alipay.sdk.app.H5PayActivity"            android:configChanges="orientation|keyboardHidden|navigation"            android:exported="false"            android:screenOrientation="behind" />        <activity            android:name="com.alipay.sdk.auth.AuthActivity"            android:configChanges="orientation|keyboardHidden|navigation"            android:exported="false"            android:screenOrientation="behind" />                <activity            android:name=".wxapi.WXPayEntryActivity"            android:exported="true"            android:screenOrientation="portrait">            <intent-filter>                <action android:name="android.intent.action.VIEW" />                <category android:name="android.intent.category.DEFAULT" />                <data android:scheme="这里替换自己申请的scheme" />            intent-filter>        activity>

6.下面我们看下调用的地方,其实很简单:

   /*    * 支付宝支付方法    * */    private void initAlipay(String type) {        Api.getApi().getRechargePay(CacheService.getIntance().getUserId(), payMoney, type)                .compose(callbackOnIOToMainThread())                .subscribe(new BaseNetSubscriber(true) {                    @Override                    public void onNext(BaseBean baseBean) {                        super.onNext(baseBean);                        PayHelper.getInstance().AliPay(aty, String.valueOf(baseBean.getReturnData()));                        PayHelper.getInstance().setIPayListener(new PayHelper.IPayListener() {                            @Override                            public void onSuccess() {                                showToast("支付成功!");                                new Thread() {                                    @Override                                    public void run() {                                        super.run();                                        try {                                            sleep(1000);                                        } catch (InterruptedException e) {                                        }                                        EventBus.getDefault().post(new MineUpdateEvent());//更新价格                                        finish();                                    }                                }.start();                            }                            @Override                            public void onFail() {                                showToast("支付失败!");                            }                        });                    }                    @Override                    public void onError(Throwable e) {                        super.onError(e);                    }                });    }    /*    * 微信支付方法    * */    private void initWexPay(String type) {        Api.getApi().getRechargePay1(CacheService.getIntance().getUserId(), payMoney, type)                .compose(callbackOnIOToMainThread())                .subscribe(new BaseNetSubscriber(true) {                    @Override                    public void onNext(WEXModel wexModel) {                        super.onNext(wexModel);                        if (wexModel.getReturnData() != null && wexModel.getReturnData().size() > 0) {                            PayHelper.getInstance().WexPay(wexModel.getReturnData().get(0));                        } else {                            showToast("信息错误!");                        }                    }                    @Override                    public void onError(Throwable e) {                        super.onError(e);                    }                });    }

以上就是微信支付和支付宝支付所有代码了,哈哈是不是发现好简单!
关于微信的签名要说明的问题:
1.首先按照微信的签名的话,一般步骤都可以往下走,但是有一点需要注意就是签完名之后,如果你打包成正式版的话也就是releasea签名的话要用正式的包安装才能唤起微信,否则会出错的,如果要是想使用Dug签名的话,你要把签名后的keystore替换掉android studio的默认签名就可以使用了。
2.上面这些类是我从自己项目整理出来的,你们拿来用,稍微改下就行。
2.一般来说 遇到比较多问题 返回 -1,这种问题网上也有对应的链接解决的,比如参数配置,后台返回的信息是不是有问题,这些小伙伴们注意一下就ok啦.

好啦以上就分享到这里,平时我也比较懒,博客写的少,哈哈,哪里写的不好的地方 希望各位大神多多指教,有好的建议留言或者 加qq** 2585760090 (记得备注下哈)**

更多相关文章

  1. 如何使用android的ndk建立native的开发环境
  2. Android安装应用失败UID 和 PID
  3. 通过signapk.jar 为Android(安卓)应用程序签名,并优化签名后的APK
  4. Android(安卓)jni GetFieldID 和 GetMethodID 函数的说明
  5. android微信支付源码分享
  6. Android(安卓)使用 apksigner 对未签名的APK安装包进行签名
  7. 庆祝一下,Android视频采集+H264编码成功
  8. Android(安卓)Studio Gradle中配置release的签名
  9. Android支付宝支付封装代码

随机推荐

  1. mac 下启动Android(安卓)Studio 时出现 A
  2. android新建项目报关于progurad.xml不存
  3. android 软件源码
  4. Android(安卓)studio finished with non-
  5. android 自动更新网址保存
  6. Android(安卓)复习笔记之图解Activity的4
  7. Edittext输入框限制字母数字
  8. Android(安卓)获取url中的参数
  9. android View 绘制完成监听
  10. Android下多页显示技巧