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() {@Overridepublic void run() {Map<String, String> 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() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);switch (msg.what) {case 0:PayResult payResult = new PayResult((Map<String, String>) 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<String, String> 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);}}}@Overridepublic 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<BasePresenter,ActivityPayResultBinding> 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;
//    }
//@Overridepublic void initData() {super.initData();api = WXAPIFactory.createWXAPI(this, Constant.WEXAPPID);api.handleIntent(getIntent(), this);}@Overrideprotected void onNewIntent(Intent intent) {super.onNewIntent(intent);setIntent(intent);api.handleIntent(intent, this);}@Overridepublic void onReq(BaseReq req) {}@Overridepublic 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<ReturnDataBean> 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<ReturnDataBean> getReturnData() {return ReturnData;}public void setReturnData(List<ReturnDataBean> 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<BaseBean>(true) {@Overridepublic void onNext(BaseBean baseBean) {super.onNext(baseBean);PayHelper.getInstance().AliPay(aty, String.valueOf(baseBean.getReturnData()));PayHelper.getInstance().setIPayListener(new PayHelper.IPayListener() {@Overridepublic void onSuccess() {showToast("支付成功!");new Thread() {@Overridepublic void run() {super.run();try {sleep(1000);} catch (InterruptedException e) {}EventBus.getDefault().post(new MineUpdateEvent());//更新价格finish();}}.start();}@Overridepublic void onFail() {showToast("支付失败!");}});}@Overridepublic 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<WEXModel>(true) {@Overridepublic void onNext(WEXModel wexModel) {super.onNext(wexModel);if (wexModel.getReturnData() != null && wexModel.getReturnData().size() > 0) {PayHelper.getInstance().WexPay(wexModel.getReturnData().get(0));} else {showToast("信息错误!");}}@Overridepublic void onError(Throwable e) {super.onError(e);}});}

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

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

Android 集成微信支付和支付宝支付工具类相关推荐

  1. Android 集成微信支付和支付宝

    最近比较闲,公司项目更换后台,于是自己来研究微信支付和支付宝支付,把自己学习的过程写下来,以备以后查看. 注:要集成微信支付和支付宝功能,必须要有以下几个配置信息,而这写信息需要公司去微信支付和支付宝 ...

  2. 安卓 集成微信支付和支付宝

    最近比较闲,公司项目更换后台,于是自己来研究微信支付和支付宝支付,把自己学习的过程写下来,以备以后查看. 注:要集成微信支付和支付宝功能,必须要有以下几个配置信息,而这写信息需要公司去微信支付和支付宝 ...

  3. Android集成微信支付

    Android集成微信支付 项目中集成第三方支付的功能,基本是我们app中经常用到的功能.今天先给大家讲一下微信支付的集成过程,重点只说一下代码部分.首先,你要到微信开发者平台注册账号,并创建你的应用 ...

  4. Android集成微信支付之-天坑

    项目集成微信支付,折腾了三天左右,坑太多,做个简单记录 开通和主要原理不再讲了,参考微信支付官网 截个官网的业务流程图,下面好说明 1 支付结果回调(图中的17步) 支付结果回调,微信官方的说法是: ...

  5. android微信迁移数据,【CSDN博客迁移】Android集成微信支付之-天坑

    项目集成微信支付,折腾了三天左右,坑太多,做个简单记录 开通和主要原理不再讲了,参考微信支付官网 截个官网的业务流程图,下面好说明 微信支付业务流程.png 1 支付结果回调(图中的17步) 支付结果 ...

  6. Android 集成微信支付详解

    打包后才能起调支付 微信支付成功起调 微信skd下载:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=11_1 签名APK下载:h ...

  7. Android集成微信支付跳坑指南

    1. 前言 "好记性不如烂笔头",现在 平常 碰到的一些知识点都是直接复制到印象笔记中,但是那些资料都比较零散,该总结的还得总结.前段时间完成了在线支付的微信支付,趁着一些注意地方 ...

  8. 【Java】快速集成微信支付和支付宝支付

    本文介绍博主自己封装的一个微信支付和支付宝支付的library apppay_library:https://github.com/gumingwei/app_pay 本项目解决的问题仅限于最后的支付 ...

  9. IOS集成微信支付或者支付宝支付功能小结

    2019独角兽企业重金招聘Python工程师标准>>> 第一,你需要有微信开发平台的开发者账号,(网址https://open.weixin.qq.com/,或者自行百度" ...

最新文章

  1. 开发日记-20190617 关键词 bash命令尝试模拟点击事件
  2. Excessive growth of the primary database log mirror and system Performance Monitoring
  3. 挑战独立开发项目能力___ITlanbao
  4. 手机软件:杀手游戏的法官助手,(人多的时候法官没有辅助,是很难记住各个角色的)...
  5. 醉了,RPC 超时设置也能引起线上事故!
  6. [云炬创业基础笔记] 创业机会的评价标准与SWOT分析
  7. Java 数组插入元素
  8. python用什么来写模块-Python 3.1 用C写模块 扩展(序)
  9. 高等数学课后答案上册同济大学第七版第一章答案
  10. 数据库系统概念第六版 第六章练习题6.11
  11. mysql获取姓名拼音首字母_C# 汉字获取拼音首字母,给数据库中的姓名添加首字母...
  12. 拉格朗日对偶问题一定是凸优化问题的证明
  13. hadoop的map和reduce
  14. 边缘的容器化 — WasmEdge 与 seL4
  15. Matlab自适应均线_DMA指标(离差移动平均)matlab源代码
  16. android 清理缓存功能 的实现,android实现清理缓存功能
  17. win7关闭系统索引服务器,如何关闭Windows7系统中的索引功能
  18. 思科服务器如何配置文件,思科服务器的配置方法
  19. 汽车钥匙改装成手机蓝牙无钥匙进入一键启动 ,汽车无钥匙进入为何不能集成到手机?蓝牙无钥匙进入一键启动解决方案
  20. getdate、dateadd、datediff、datename、datepart关于日期函数的用法及理解

热门文章

  1. Python 设置机器码验证
  2. OpenGL学习笔记(二)-着色器-纹理
  3. 【软件开发】使用Electron开发简单的记事本
  4. matlab模拟短波天波,天波传播.ppt
  5. 永续合约 perpetual swap
  6. 乔布斯在斯坦福的演讲
  7. C++使用Hadoop
  8. 保护眼睛绿色桌面资源
  9. php获取全国最新省市区行政区划数据
  10. 厂用电继电保护整定计算导则 DL/T 1502 - 2016