Android 微信支付接入笔记
来源:互联网 发布:中广核软件人员工资 编辑:程序博客网 时间:2024/06/01 07:35
我们在App移动开发中,支付功能基本都会遇到。前几天公司项目中有微信支付的功能,特此记录一下。本文基于AndroidStudio进行开发的。
第1步 阅读官方文档
微信官方文档
通过文档,我们要申请微信开发者平台(和微信公众号要区别),对开发者资质进行认证。还有重要一点交费!!!
第2步 填写App基本信息,获取APPID
填写App信息时候,要注意下面几点:
应用包名要保持一致.
要确定填写应用包名和App项目配置文件AndroidManifest.xml中声明的package值、项目中build.gradle文件中applicationId都保持一致。
应用签名:32位的md5串(数字小写)
可以用微信签名工具获取md5值,也可以用keytool 命令进行编译查看md5值。重要一点:该处填写 release签名(后缀名.jks)。
请注意以上2点,否则,会导致调起支付报errCode=-1.
第3步 熟悉支付流程
具体看微信业务交互时序图,可以更好理解支付整个流程和逻辑。
第4步 支付SDK依赖
- 在build.gradle文件中,添加如下依赖即可:
//下面依赖根据业务需要,任选其一dependencies { //包含统计功能 compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+' //不包含统计功能 compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'}
- 权限配置
<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"/>
第5步 配置AS工程
在项目中增加一个wxapi包名,同时必须有WXPayEntryActivity这个类名,否则无法调起微信支付。建议:WXPayEntryActivity直接从demo中copy过来,减少不必要的麻烦。同时,包名的路径和AndroidManifest.xml文件中WXPayEntryActivity配置如图:
第6步 支付请求代码
- 注册appId
在需要调起支付Activity的onCreate()方法中进行注册appId.
IWXAPI wxApi= WXAPIFactory.createWXAPI(context, null); wxApi.registerApp(appId);
- 发起支付
public void getWXpayOrderInfo(WXPayBean wxPayBean) { PayReq req = new PayReq(); //wxPayBean是根据服务器返回json数据生成bean实体对象 req.appId = wxPayBean.getAppid(); req.partnerId = wxPayBean.getMch_id(); req.prepayId = wxPayBean.getPrepay_id(); req.nonceStr = wxPayBean.getNonce_str(); req.timeStamp = String.valueOf(wxPayBean.getTimestamp()); req.packageValue ="Sign=WXPay"; req.sign =CommonUtils.getSign(wxPayBean,req.timeStamp); //发起支付请求 wxApi.sendReq(req); }
注意: sign值 服务器端应该如下规则进行加密:
签名算法调起支付接口参数说明
第7步 WXPayEntryActivity配置
public class WXPayEntryActivity extends BaseActivity implements IWXAPIEventHandler { private IWXAPI api; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); api = App.getWXApi(); api.handleIntent(getIntent(), this); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); api.handleIntent(intent, this); } @Override public void onReq(BaseReq baseReq) { } @Override public void onResp(BaseResp resp) { if(resp.getType()==ConstantsAPI.COMMAND_PAY_BY_WX){ switch (resp.errCode) { case BaseResp.ErrCode.ERR_OK://成功 break; case BaseResp.ErrCode.ERR_USER_CANCEL://取消支付 break; case BaseResp.ErrCode.ERR_COMM:// -1 break; } } }}
至此,支付接入流程已完成了。
支付接入注意点
微信开放平台签名的问题
只要你手机上的程序的签名和你在微信平台登记的签名一致即可,无论是debug版本,还是release版本都可以调起支付成功。如果你使用debug签名,记得正式上线的时候,去微信开发平台改成release版本的签名(可能需要一段时间才会生效)。如果你使用release签名,不需要测试支付功能打包,在bulid.gradle文件加如下代码:
微信支付同一订单不会第二次跳到支付页面 提示支付失败,同一订单第二次支付的时候直接在请求遇支付订单的时候就会返回preayid为null。
- 微信支付同一订单只能绑定一个价格,如果已经生成过则获取到的prepareid为null ,不可以调起支付。
- Android 微信支付接入笔记
- Android 微信支付接入
- Android 接入微信支付
- Android 接入微信支付
- Android微信支付接入
- # Android微信支付接入
- Android 接入微信支付宝支付
- Android 接入微信支付宝支付
- Android 接入微信支付宝支付
- Android 接入微信支付宝支付
- Android 接入微信支付宝支付
- Android 接入微信支付宝支付
- Android 接入微信支付宝支付
- Android 微信支付和支付宝支付 快速接入
- Android 微信支付和支付宝支付 快速接入
- Android 微信支付和支付宝支付 快速接入
- Android接入微信支付和支付宝支付(1)
- Android接入微信支付和支付宝支付(2)
- 获取用户Ip地址常见安全隐患及解决办法
- sql去重
- springboot应用管理工具Spring Boot Admin Reference Guide
- Java面向对象复习1
- ##########(好好好)xgboost原理########
- Android 微信支付接入笔记
- JVM的内存结构
- 页面操作全部采用调用函数方法实现(包括监听事件)
- Qt+gsoap调用WebService
- Python学习笔记_元组、字符串、序列
- C# 一些概念
- Leetcode-N-Queens II
- 微信多客户端导致重复调用服务接口问题
- 研究一下repartitionAndSortWithinPartitions算子