最近几天采坑了微信代扣,开发流程很简单,但是官方文档实在缺少一个具体的指引,导致走了很多弯路,因此本文分享一下自己的经验。

微信代扣开发者文档: https://pay.weixin.qq.com/wiki/doc/api/pap.php?chapter=18_1

微信代付文档截图

上图是文档的网页截图,其中红框里的 SDK 需要配置一下,APP跳转签约页面方法指引 是外部唤起微信的方法,(话说这个入口我找了好久才发现,一把辛酸泪……)

文档很长,对于各个端做什么也没有明确描述,所以我站在 Android 端的角度,讲一下开发流程。总共分以下三步:

1、调用服务端接口进行签约

服务端接口的返回类型是自定义的 Contract 类,其中 contractId 和 contractUrl 是 Android 端能用到的。(接口格式以你们服务端给的为准,此处仅供参考)

//签约

@POST("/xxx/contracts")

Observable> getContract();

public class Contract {

@JsonProperty("contract_id")

public String contractId; // 微信给的签约合同号

@JsonProperty("contract_url")

public String contractUrl;// 可以调起微信的url

@JsonProperty("product_id")

public String productId; // IOS 会用到的 id,Android 端可以直接忽略

}

2、利用服务端返回的 contractUrl 调起微信签约付款页

private void toWeChatScan(String url) {

try {

WeChatPayUtil.pay(getActivity(), url);

} catch (Exception e) {

//若无法正常跳转,在此进行错误处理

Toast.makeText(getContext(), "跳转到微信失败",Toast.LENGTH_SHORT).show();

}

}

public class WeChatPayUtil {

private static IWXAPI sWXAPI;

/**

* 微信代扣

* @param pActivity

* @param url

* @return

* @throws Exception

*/

public static boolean pay(Activity pActivity, String url) throws Exception {

if (sWXAPI == null) {

sWXAPI = WXAPIFactory.createWXAPI(pActivity, WeChatHelper.WECHAT_APP_ID);

}

if (微信未安装) {

ToastUtils.showLongToast(pActivity, R.string.toast_text_weixin_not_installed);

return false;

}

toWechatContractPay(url);

return true;

}

private static void toWechatContractPay(String url) {

OpenWebview.Req req = new OpenWebview.Req();

req.url = url;

sWXAPI.sendReq(req);

}

}

3、调用服务端接口轮询检查支付状态

微信代付的话,在微信中支付完成后,并不会同步返回结果给我们的 app,只会把支付结果通知我们的服务器,所以需要在我们的 app 中对服务器进行轮询来检查支付结果。

检查也不需要很多次,我们项目里是轮询 5 次,1 秒一次,已经足够了。

(接口格式以你们服务端给的为准,此处仅供参考)

/**

* 查看自动续费签约状态

*

* @param packageId

* @param contractId

* @return

*/

@GET("/xxx/contracts/{contract_id}")

Observable> getOrderStatus(@Path("contract_id") String contractId);

其中的 contract_id 是在步骤1中返回的,这里需要用这个合同号来检查状态。

public class OrderStatus {

@JsonProperty("status")

public String status;//granted, ungranted, pending, unsubscribed

@JsonProperty("singed_at")

public long singedAt;//签约成功的时间(这个只有在 granted 状态时才有效)

@JsonProperty("contract_type")

public String contractType;//wechat, iap

@JsonProperty("withhold")

public OrderStatusWithhold withhold;

}

public class OrderStatusWithhold {

@JsonProperty("status")

public String status;//

@JsonProperty("error_message")

public String errorMessage;

}

需要注意上面两个 status 代表不同的意义, orderStatus.status 是签约状态,而orderStatusWithhold.status 是扣款状态,有可能签约成功,但是扣款时因为余额不足等原因而失败。

android自动签约续费功能,微信代扣 Android 开发流程相关推荐

  1. php实现自动续费功能,如何关闭wps自动续费

    微信中,打开"支付管理"界面,点击"自动扣费":然后找到"wps自动续费"项,点击进入:最后点击"关闭服务"即可.支付宝 ...

  2. 苹果手机如何关闭自动续费_微信支付宝一键关闭自动续费

    据中国消费者报报道,现在许多视频.音乐等App都有会员充值服务,其中不少是"自动续费",有时候时间长了就忘了,也有的"隐藏得太深"被动"就缴了费... ...

  3. WPS会员如何取消自动续费?微信/支付宝/WPS共3种方法

    ​​WPS 开启会员模式之后还是非常好用的,老古这些年就一直使用 WPS 会员来办公,不过有些用户不想花钱购买会员了就想取消 WPS 会员的自动续费功能,那么应该如何取消呢?今天老古就简单说一下微信. ...

  4. 腾讯视频关闭自动续费功能

    腾讯视频更新版本之后,找个老半天才发现如何关闭自动续费.记录在这里备用. 1,打开手机腾讯视频APP. 2,点击右下角的个人中心. 3,点击左上角的"我的VIP会员". 4,拉到最 ...

  5. java对接PayPal支付-自动续费功能

    一. java对接PayPal支付(v2). 讲了PayPal v2:checkout-sdk 的对接过程 二. java对接PayPal支付 (添加物流跟踪信息). 讲了PayPal添加物流信息 的 ...

  6. 【小程序】微信小程序开发流程

    文章目录 一.概述 二.整体开发架构 三.注册账号和安装开发工具 1)注册账号 1.注册方法 2.选择注册的帐号类型 3.填写邮箱和密码 4.激活邮箱 5.填写主体信息 6.登录后台补充信息 2)安装 ...

  7. 微信小程序开发流程的两种方法科普

    现在微信小程序早已渗透我们日常生活的方方面面,很多商家看到了小程序带来的巨大流量,也想开发一个自己的小程序.所以今天就跟大家科普下微信小程序开发流程,你会发现这个开发过程其实非常简单. 1. 在微信公 ...

  8. 小程序发布上线流程_微信小程序开发流程的两种方法科普

    现在微信小程序早已渗透到我们日常生活的方方面面,很多商家看到了小程序带来的巨大流量,也想开发一个自己的小程序.所以今天就跟大家科普下微信小程序开发流程,你会发现这个开发过程其实非常简单. 1. 在微信 ...

  9. ui测试怎么做?依据文档有哪些_微信小程序开发流程有哪些?各个环节注意事项...

    微信小程序开发流程有哪些?各个环节注意事项是什么?微信小程序开发有哪些注意事项,开发流程是怎样的?下面就一起来看看吧. 1.微信小程序开发之注册小程序 在开发小程序之前,首先就是要注册一个小程序.不过 ...

  10. 微信第三方平台开发流程和总结

    微信第三方平台开发流程和总结 创建第三方平台 1).在微信开放平台-管理中心-第三方平台中创建第三方平台账号.创建第三方平台 2).选择"平台型服务商类型"创建第三方平台.填写第三 ...

最新文章

  1. 高效程序员的 7 个共同特征
  2. 硬盘分区表知识——详解硬盘MBR(转)
  3. 【系统平台】大四区部署
  4. 1.6 课程资源-深度学习-Stanford吴恩达教授
  5. 【DP】【高精】逆序对(jzoj 2014)
  6. 聚类分析(三)Mini Batch KMeans算法
  7. 深入浅出 eBPF: (Linux/Kernel/XDP/BCC/BPFTrace/Cillium)
  8. win32开发(消息机制)
  9. STL::算法::常见算法
  10. 攻防世界 mobile 安卓移动端简单题练习区 答题(1-12题解)
  11. Testng 的数据源 驱动測试 代码与配置
  12. python os模块
  13. 2022年最新的Detectron 2 (0.6) 安装流程(联想笔记本Y9000K+Anaconda+Win 11 +RTX3070)
  14. BFA“瑞云科技”大视频讲堂第五期“从好莱坞电影融资模式到中国电影的国际化”...
  15. java期末李鹤_Willike
  16. 新手学开车,起步,停车,倒库移库,练习图解,开车基本技巧
  17. 【原创】智能云计算机(云脑)软件开发招商
  18. vue中获取短信验证码IOS手机问题
  19. 关于scanf与scanf_s
  20. 使用计算机需要准备硬件和什么,当个人计算机需要使用ADSL访问Internet时,所需的基本硬件设施是什么?...

热门文章

  1. Allegro SigXplorer 等长设置方法-比较简单
  2. 【C/C++服务器开发】什么是服务器?服务器分类及构建一个简单的服务器系统
  3. 鼎信诺虚拟服务器导数,鼎信诺审计软件常见问题
  4. 汇率战争下的人民币走势
  5. 此电脑创建桌面快捷方式
  6. 富爸爸穷爸爸读书感言
  7. 利用微信聊天记录,送女友个小礼物
  8. 笔记本插拔电源屏闪问题
  9. 属性动画实现卫星菜单效果
  10. OpenWRT软件安装教程,安装的几种方法