写在前面

一家移动互联网公司,说到底,要盈利总是需要付费用户的,自己开发支付系统显然是不明智的,国内已经有多家成熟的移动支付提供商,腾讯就是其中之一。梳理了下微信支付的接入,今天给大家分享下腾讯旗下的微信支付SDK的接入流程。

Android App支付系列(二):支付宝SDK接入详细指南

Android开发:使用EasyPay打造全能移动支付框架:集成微信,支付宝,银联支付的开源支付框架

接入流程

1.申请开发者资质

地址:https://open.weixin.qq.com/

使用公司管理者/高层帐号登录微信开放平台,进入“账号中心”,进行开发者资质认证,需要填写公司资料,包括但不限于,公司注册号,公司营业执照,公司对外办公电话,公司对公银行卡信息(卡号,发卡行)。审核时间为一周左右。
备注:因为从2015年10月1日起,国家实行三证(组织机构代码证,企业营业执照,税务登记证)合一,所以组织机构代码处填写-工商执照注册号,同样,组织机构代码证,上传-企业工商营业执照。
备注2:进行开发者资质认证需要支付300元人名币/年,只有具备开发者资质认证的开发者才能够使用app支付,授权登录等接口。

2.申请APP_ID/APP_KEY
每个应用/游戏要调用微信的接口都需要有一个微信标志,这个唯一标志通常成为APP_ID或者APP_KEY,各开放平台差异不大
进入管理中心,创建移动应用,每个开发者具有10个应用的创建机会,好在创建的应用可以随时删除。已上线的应用就不建议手贱删除!!
申请appid需要填写应用信息:应用名称,包名,签名(keystore的md5值去分号小写),icon(28*28 & 108*108),app下载地址等信息,即可分配到一个appid。
备注:测试支付时,务必使用申请时填写的keystore文件签名,包名也需要核对清楚,必然无法调起支付,返回-1错误码。

3.申请支付能力
在管理中心,查看需要集成支付能力的app,找到“微信支付”一栏,点击右侧“申请开通”,填写一些企业信息后等待审核,审核时间为一周左右,审核通过后,会得到一个企业商户号及密码,对公银行卡中将收到几分钱,进入商户平台,输入收到的金钱金额以验证。验证通过后即可开始集成支付调用。在这之前,调用支付接口是无法完成支付的。

4.代码集成微信支付
支付流程图

微信支付流程图白话版
1.客户端代码得到用户购买的商品信息,将之传给自己公司app服务器,参数包含但不限于以下:

params.put("appid", appID);// 微信appid,选择性上传,服务器写死亦可
params.put("money", money);// 支付金额,单位:分
params.put("name", goodsName);// 商品名称
params.put("currencytype", "CNY");// 支付币种,只能填CNY,代表人民币

备注:以上是参数字段是我们公司服务器定义,给服务器用以获取预支付订单号prePayId用。
备注2:详细字段请参考:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1
2.app服务器调用微信“统一下单”接口,得到prePayId订单号并返回prePayId给手机客户端;
3.手机客户端使用prePayId及商品信息调起微信客户端进行支付;
3.1用户操作:输入密码进行支付;返回键取消支付;网络无连接支付失败等;
4.微信客户端回调支付结果给咱们的APP客户端;
5.微信服务器异步通知咱们公司app服务器支付结果(服务器的工作,与客户端无关)

微信支付代码:

IWXAPI mWxApi = WXAPIFactory.createWXAPI(mContext, WX_APPID, true);
mWxApi.registerApp(WX_APPID);/*** 请求app服务器得到的回调结果*/@Overridepublic void onGet(JSONObject jsonObject) {if (mWxApi != null) {PayReq req = new PayReq();req.appId = WX_APPID;// 微信开放平台审核通过的应用APPIDtry {req.partnerId = jsonObject.getString("partnerid");// 微信支付分配的商户号req.prepayId = jsonObject.getString("prepayid");// 预支付订单号,app服务器调用“统一下单”接口获取req.nonceStr = jsonObject.getString("noncestr");// 随机字符串,不长于32位,服务器小哥会给咱生成req.timeStamp = jsonObject.getString("timestamp");// 时间戳,app服务器小哥给出req.packageValue = jsonObject.getString("package");// 固定值Sign=WXPay,可以直接写死,服务器返回的也是这个固定值req.sign = jsonObject.getString("sign");// 签名,服务器小哥给出,他会根据:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=4_3指导得到这个} catch (JSONException e) {e.printStackTrace();}mWxApi.sendReq(req);Log.d("发起微信支付申请");}}

在app包下新建wxapi包,比如app包名为com.xiongit.app,那个新建的包路径为com.xiongit.app.wxapi,该包下新建WXPayEntryActivity,继承自任意Activity。该Activity用以接收支付结果回调,清单声明此Activity的格式为

<activity
       android:name=".wxapi.WXPayEntryActivity"android:exported="true"android:launchMode="singleTop"/>

WXPayEntryActivity代码示例

public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler{private static final String TAG = "MicroMsg.SDKSample.WXPayEntryActivity";private IWXAPI api;private static final String APP_ID = "your app id";@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.pay_result);api = WXAPIFactory.createWXAPI(this, APP_ID);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) {Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);// 支付结果码}
}

回调中errCode值列表:

0 支付成功
-1 发生错误 可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。
-2 用户取消 发生场景:用户不支付了,点击取消,返回APP。

清单menifest申明所需权限

    <uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

备注:支付结果最终以app服务器的得到的异步通知为准。

微信SDK混淆

-keep class com.tencent.mm.sdk.** {   *;
}

update 20160704

当支付时,微信尚未登录,得不到任何回调,如果调起支付时有弹窗进度框,并且你想在得到响应码后让它消失是行不通的,需要在跳出的onStop中处理进度条,不然未登录并且用户取消了支付时进度条无法消失。

update 20160722

当支付时,WXPayEntryActivity会以透明的形式启动,所以你可能需要在支付完成得到支付响应码后手动finish该activity,不然你自己写的支付页面的activity需要返回两次才能退出,因为第一次按下back键实际是finish掉WXPayEntryActivity.第二次才是你自己的activity.

完事了,祝各位集成微信支付成功!
本文作者xiong_it,链接:http://blog.csdn.net/xiong_it
最后附上微信官方支付demo下载:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=11_1,吐槽语:官方demo下载藏的有点深。。。开放平台居然没有提供下载,放在微信支付商户平台。

Android App支付系列(一):微信支付接入详细指南(附官方支付demo)相关推荐

  1. Android App支付:支付宝SDK接入详细指南(附官方支付demo)

    Android App支付:支付宝SDK接入详细指南(附官方支付demo) 前言 一家移动互联网公司,说到底,要盈利总是需要付费用户的,自己开发支付系统对于资源有限的公司来说显然不太明智,国内已经有多 ...

  2. Android App支付系列(二):支付宝SDK接入详细指南(附官方支付demo)

    前言 一家移动互联网公司,说到底,要盈利总是需要付费用户的,自己开发支付系统对于资源有限的公司来说显然不太明智,国内已经有多家成熟的移动支付提供商,阿里就是其中之一. 继< Android Ap ...

  3. 支付宝SDK接入详细指南(附官方支付demo)

    前言 一家移动互联网公司,说到底,要盈利总是需要付费用户的,自己开发支付系统对于资源有限的公司来说显然不太明智,国内已经有多家成熟的移动支付提供商,阿里就是其中之一.  继< Android A ...

  4. 在线支付篇(微信)——native方式(付款码支付)

    前一段时间由于项目功能的需要,需要支持几种在线支付.之前也没有接触过这一方面.下面来说说我期中的一种很常用的支付方式吧--微信支付. 这篇文章能,主要用来记录一下我实现微信支付的付款码支付和jsapi ...

  5. Android App Dark Theme(暗黑模式)适配指南

    在 2019 年的 Google I/O 和 Apple WWDC 上,新露面的 Android 10 和 iOS 13 都宣布将支持 Dark Theme 也就是我们常说的暗黑模式,并提供相关 AP ...

  6. Android APP:Preference使用详解和实例(附源码)

    Android APP:Preference使用详解和实例 一.Preference 是Android app中重要的控件之一,Settings 模块大部分都是通过Preference 实现的,这里将 ...

  7. Android 仿 新闻阅读器 菜单弹出效果(附源码DEMO)

    这一系列博文都是:(android高仿系列)今日头条 --新闻阅读器 (一) 开发中碰到问题之后实现的,觉得可能有的开发者用的到或则希望独立成一个小功能DEMO,所以就放出来这么一个DEMO. 原本觉 ...

  8. android微信风格,Android实用View系列-----仿微信支付宝等风格的支付密码输入框的实现...

    开始阅读本篇文章之前先来说一下使用场景吧,我们知道如今移动支付已经占据我们日常支付的90%的份额,以微信支付和支付宝支付为主,也越来越多的APP开始添加支付模块,不管使用哪种支付有一个步骤是少不了的, ...

  9. Android App Dark Theme(暗黑模式)适配指南,android实战mysql

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v2qd7l5a-1636430548017)(https://user-gold-cdn.xitu.io/2020/3/ ...

最新文章

  1. R语言使用randomForest包构建随机森林模型(Random forests)、使用importance函数查看特征重要度、使用table函数计算混淆矩阵评估分类模型性能、包外错误估计OOB
  2. 副连长是什么级别_“上尉副连长”和“中尉连长”谁的级别高 别再傻傻不知道!...
  3. JS实现各种复制到剪贴板
  4. css background size
  5. css下拉点击不动,CSS3 - 进行简单的点击下拉[关闭](CSS3 - Making a simple click-dropdown [closed])...
  6. Java基础篇:文件如何读写?
  7. Roboter's blog » python 读取ini文件
  8. ESET NOD32激活码/许可证密钥/用户名密码
  9. 基于JSP的旅游网站论文
  10. SD nand flash 简单的读写速度测试
  11. android多个app音量调节问题,「App 音量控制」依每个 App 的使用需求自动调整音量(Android)...
  12. Luogu_P4556 雨天的尾巴【题解】树上差分 线段树合并
  13. 计算机网络实验报告双机互联,双机互联实验报告.docx
  14. 控制系统中带宽的理解
  15. 面试官:你能说一下 什么是熔断?什么是服务降级吗?
  16. MIT四足机器人MIT Cheetah的硬件框架
  17. html下拉选择图片,图片+JavaScript+CSS打造漂亮的select下拉选择框
  18. java吞食天地中武将_在FC吞食天地2里面,哪些武将的基础属性出乎玩家预料
  19. 基于React的富文本编辑器——Braft Editor使用
  20. 【技术推荐】WebLogic 反序列化漏洞深入分析

热门文章

  1. 什么是机器学习,为什么它如此重要?
  2. 小程序开发框架_mpvue(六)卡通照片的实现思路
  3. 从零点亮一个led灯
  4. 苹果iPhone 7价格差很多,谨慎购买!
  5. 信息武器化——认知安全的必要性
  6. 动态规划法——常见题型及算法思路
  7. pyecharts 主题:颜色渐变实例(线性渐变)
  8. 链路层链路发现协议(LLDP)讲解
  9. 成都市二手房行情分析
  10. 华为测试 称砝码