“支付宝接入要5分钟,微信支付接入要5小时”

有做过支付经验的人,应该对这句话有些微感触。虽然没那么夸张,但确实微信支付的参考文档没有支付宝人性化。下面记录一下我对微信支付的一些理解。

产品注册、功能签约、SDK集成等操作就不细说,微信开发者社区有详细文档。

步骤一:下订单

此步骤中后台的工作量要更多,Android客户端只需提交商品订单号,主要是接收后台返回的数据,而后台返回的数据中,最基本的一些字段有:

prepayId :预支付ID

nonceStr:随机数

timestamp:时间戳

sign:签名

根据业务逻辑不同,可以定义更多字段,但是这四个字段是必须的。

步骤二:构造支付请求参数

代码如下:

val req = PayReq()

req.appId = AppID.WEIXIN_APP_KEY //(应用签约时生成)

req.partnerId = AppID.WX_PAY_PARTNER_ID //(应用签约时生成)

req.prepayId = orderParams.prepayid // (服务器字段)

req.nonceStr = orderParams.noncestr// (服务器字段)

req.timeStamp = orderParams.timestamp.toString() // (服务器字段)

req.sign = orderParams.sign // (服务器字段)

req.packageValue = "Sign=WXPay" // (固定写法,目前不知道该字段何用,可能是SDK里面需要校验)

req.extData = tradeNo // (可选项,附加数据,用于程序员扩展用,稍后会讲述如何使用)

步骤三:请求支付

val api = WXAPIFactory.createWXAPI(activity, AppID.WEIXIN_APP_KEY) // 获取到微信支付api对象

api.sendReq(req) // 发起支付,参数为步骤二构造的PayReq

步骤四:客户端结果回调

需要在应用的包名后面新建一个package,命名为wxapi,在该包下新建Activity,命名为WXPayEntryActivity。注意:以上两个命名必须固定,否则无法回调微信支付结果,具体代码:

class WXPayEntryActivity : Activity(),IWXAPIEventHandler {

companion object{

const val TAG = "WXPayEntryActivity"

}

private lateinit var mApi : IWXAPI

override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

mApi = WXAPIFactory.createWXAPI(this, AppID.WEIXIN_APP_KEY) // 获取微信支付api对象

mApi.handleIntent(intent, this) // 固定写法

}

// AndroidManifest中设置启动模式为singleTop,所以需要重写onNewIntent方法

override fun onNewIntent(intent: Intent?) {

super.onNewIntent(intent)

setIntent(intent)

mApi.handleIntent(intent, this) // 固定写法

}

/**

* 微信支付结果回调

*/

override fun onResp(p0: BaseResp?) {

TODO: 支付结果在这里回调,通过判断参数BaseResp的errCode,来判断客户端收到的支付结果

}

override fun onReq(p0: BaseReq?) {

}

步骤五:向服务器查询真实的支付结果

注意:客户端收到支付结果,只能作为支付流程结束的标志,真实支付结果必须以服务器结果为准

当我们客户端支付完成后,微信服务器会向我们的后端服务器发送支付结果通知,客户端再去请求这个结果,最后展示给用户。

这里会有一个时间差的问题。因为由于网络原因,当客户端支付流程结束,而微信服务器并没有及时通知到后端服务器,这时候请求结果就不是最终的结果,所以这里建议做一个网络请求的轮询。

最后,再说一下如何获取到步骤二中的 extData :

当支付成功后,会在WXPayEntryActivity中获取到exData,该数据会原样返回。该数据可以用来标记支付类型、购买商品类型、购买商品订单等等,获取方法:

val resp = p0 as PayResp // 将BaseResq强转为PayResq

val tradeNo = resp.extData // 再将PayResq的extData取出

最后嘱咐一句: 类似于这种流程性很强并且有多种耗时操作的功能,推荐使用Kotlin couroutine来做。

android6.0 微信支付,Android - 微信支付相关推荐

  1. 微信 for android,微信WeChat v8.0.6 for Android 官方正式版

    微信十周年之际,微信 WeChat 8.0.0 for Android 正式版发布,安卓微信8.0版本带来了一大波功能,例如:炸弹刷屏.全新动态表情.个人状态.好友封面.浮窗功能改版.好友上限提升至1 ...

  2. android6.0麦克风权限,android 6.0权限检测以及6.0以下,麦克风、相机权限判断

    android 6.0以上权限 android 6.0以上权限,我是通过PermissionsDispatcher进行申请,操作的,具体使用方法,见PermissionsDispatcher,Andr ...

  3. android游戏渠道支付,Android渠道支付隐患及推荐解决方案

    导语: 正版IOS的应用市场统一,支付方式统一. 所以IOS版本,充值档次都是固定的,需要在开发者后台配置每一个具体的支付档次,支付环节快速方便不会出现问题. 但是Android下载渠道很多,支付方式 ...

  4. android 微信 demo,android微信分享demo

    [实例简介] android微信分享demo 开发实例源代码 [实例截图] [核心代码] android微信分享demo └── android微信分享demo └── wxshare ├── And ...

  5. 微信分身 android,微信分身版安卓版

    微信分身版下载安卓版是一款能让您的安卓手机同时使用两个微信的应用.一部安卓手机可以安装两个个相同软件,同时运行互不影响.操作简单,只需一键点击分身制作,静待安装分身数秒便可获得.源自官方应用,体验一模 ...

  6. android安装多个微信支付,android微信支付详解与坑

    要想在自己的APP中实现APP支付必须申请开通支付功能,这些按着文档来吧,我还是直接说Android中的问题吧. 一.签名 一定要在开放平台为自己的APP配置正确的包名和签名(签名:将APP打一个正式 ...

  7. 微信 配置文件 android,微信支付,配置指南 (Android 端) – 热爱改变生活

    愁死我了~ 当我看到微信支付的接口,并且下载了它的 demo 之后,这是我的感觉. 程序猿何苦为难程序猿. 硬着头皮看 demo. 第一步: 第二步 Constants 里面有三个参数:APP_ID, ...

  8. android6.0花屏6,微信6.5安卓内测版Bug,部分机型花屏成这样了

    原标题:微信6.5安卓内测版Bug,部分机型花屏成这样了 微信安卓版6.5内测版在前几天推动报名了,但无奈安卓手机的机型和版本太多,部分机型出现了小视频录制的BUG.这里简单介绍下! . 本次更新的最 ...

  9. android 微信 openid,android 微信登陆手把手教学获取openid

    最近项目用到微信支付,企业打款到个人微信账户余额,需要个人在提交结算时授权微信登陆,以获取openid,用于企业打款,许久没有撸微信第三方的我吓得赶紧把流程都记录一下 image.png image. ...

最新文章

  1. 一张图,一棵大树,六种人, 六载人生 ~
  2. [工具推荐]制作基于Dash的本地文档方便搜索文档api和内容
  3. 前端随笔整理[5.14]
  4. webpack v3 结合 react-router v4 做 dynamic import — 按需加载(懒加载)
  5. 国家植物标本资源库信息网正式上线
  6. 【Q】【POJ 2560】【POJ 2031】
  7. python flask框架是什么_Python三大web框架分别是什么 哪个更好
  8. 猜年龄 蓝桥 填空题2013省赛
  9. Unity常用工具类
  10. 图书管理系统(数据库)
  11. vscode c语言插件_推荐学习C语言或CPP使用的代码编辑器
  12. 微信小程序开发系列 (三) :微信小程序如何响应用户点击事件和微信平台 API 的使用方法介绍
  13. 无线网卡插到服务器 没有反应,无线网卡插上没反应怎么办
  14. Android-黑客技术-实现类似电脑版软件破解版
  15. 音频录制(react)
  16. 计算机电源要求吗,电脑真的需要用大功率电源吗?走出选择电源误区
  17. 设计模式 - 六大设计原则之OCP(开闭原则)
  18. 城墙(sandcas.pas/cpp)
  19. 如何设计一个秒杀服务
  20. RV1126新增驱动IMX415 SENSOR,实现v4l2抓图

热门文章

  1. 哪个软件可以消除人声,怎样消除mp3的人声保留音乐
  2. 我的“信条”——富尔格姆的短文《信条》读后感 (2018-05-06 22:11:04)
  3. oracle gtx,RAC后台GTX进程
  4. python下载图片超时_python3在极端网络波动下的智能判断下载
  5. Java设计模式——模板方法模式【Template Method Pattern】
  6. python支付宝每天自动收能量_用Python实现定时自动化收取蚂蚁森林能量,再也不用担心忘记收取了...
  7. 使用Druid解析SQL实现血缘关系计算,获取sql执行语句、表名、字段等信息
  8. 什么是fetchsize?
  9. 第十八届全国大学生智能车竞赛车模技术检查文档
  10. 使用USB外置声卡出现爆音的解决方法