美文网首页android 工具包android
微信代扣 Android 开发流程

微信代扣 Android 开发流程

作者: GloryObject | 来源:发表于2018-01-19 11:31 被阅读1377次

最近几天采坑了微信代扣,开发流程很简单,但是官方文档实在缺少一个具体的指引,导致走了很多弯路,因此本文分享一下自己的经验。
微信代扣开发者文档: https://pay.weixin.qq.com/wiki/doc/api/pap.php?chapter=18_1

微信代付文档截图

上图是文档的网页截图,其中红框里的 SDK 需要配置一下,APP跳转签约页面方法指引 是外部唤起微信的方法,(话说这个入口我找了好久才发现,一把辛酸泪……)
文档很长,对于各个端做什么也没有明确描述,所以我站在 Android 端的角度,讲一下开发流程。总共分以下三步:

1、调用服务端接口进行签约
服务端接口的返回类型是自定义的 Contract 类,其中 contractIdcontractUrl 是 Android 端能用到的。(接口格式以你们服务端给的为准,此处仅供参考)

  //签约
  @POST("/xxx/contracts")
  Observable<Response<Contract>> 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<Response<OrderStatus>> 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;//<"created", "pending", "succeeded", "failed">

    @JsonProperty("error_message")
    public String errorMessage;

}

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

附一个讲代扣整体过程的文章,要开发的话值得一看:
http://jverson.com/2015/12/20/wechat/

相关文章

  • 微信代扣 Android 开发流程

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

  • iOS 微信代扣开发流程

    123 一:介绍 项目中要用到支付功能,需要支付宝支付、支付宝网页支付、微信支付、银联支付、Apple_pay、微...

  • Android 微信支付开发流程

    首先奉上调起支付页面截图 一:介绍 项目中要用到支付功能,需要支付宝支付、微信支付、银联支付,所以打算总结一下,方...

  • Android App & 微信小程序

    微信开发平台-Android开发示例 Android APP调起小程序

  • 微信代扣签约

    官方文档:https://pay.weixin.qq.com/wiki/doc/api/pap.php?chapt...

  • android sdk 集成微信小程序吊起 一

    本期需求,在sdk中添加微信小程序吊起功能。主要流程如下 开发前需下载Android开发工具包(SDK),可 调用...

  • 收录 : iOS支付开发

    iOS 银联支付开发流程iOS 微信支付开发流程iOS 支付宝支付开发流程iOS Apple Pay开发流程App...

  • android 微信 支付 接入流程总结

    [TOC] 客户端微信支付 android 接入微信指南android 资源下载页微信支付 开发文档 登录微信官方...

  • 微信授权接入流程

    Android微信接入流程大致总结: 前言: 微信现在已经无处不在了,对于微信授权接入的流程,大致总结了一下。 1...

  • 微信小程序运行和发布流程

    小程序启动和发布流程步骤: 一、启动流程 1.拿到代码后,先选择开发工具,如果是微信原生开发,你可以选择微信开发者...

网友评论

  • 天天小志:你好,如果不通过服务器去调用微信签约的接口,我们APP上自己调用此接口(回调写服务端接口),那么是否就是OpenWebview.Req req = new OpenWebview.Req();
    req.url = url.toString();中的req.url,比如url="https://api.mch.weixin.qq.com/papay/entrustweb?appid=wx888888&;mch_id=153213111&plan_id=&contract_code=&request_seri..."
    天天小志:@GloryObject 你好,我在把Url拼接好通过调用sendReq发送到微信,可是不能正常调用,你这边可以给看下后台处理了什么吗?他给你返回的url是什么呢?
    天天小志:@GloryObject 多谢,回头我试下哈
    GloryObject:看着挺像
  • b6ef32582587:开发功能为:扫描二维码以后/注册手机号码/转入学生姓名/年级、班级/支付开通自动续费包月功能/成功后发送信息到达注册手机号码(登陆APP帐号/登陆密码/APP下载链接)
  • b6ef32582587:可以留下你联系方式吗?我公司要开发自动续费平台!
  • c2c3d8d9b7ee:OpenWebview.Req req = new OpenWebview.Req();
    req.url = url;
    sWXAPI.sendReq(req);
    请问调起微信页面之后结果会回调到WXEntryActivity里吗?现在打开一个url(随便写的)会提示无法访问也没有任何回调(暂时没有正确的URL可以调试)
    GloryObject:@当我变成大胖子 不用客气~
    c2c3d8d9b7ee:@GloryObject 这样子呐,非常感谢你的回答!!
    GloryObject:不会回调到 app 里的,微信那边只会把支付结果给你们的后端,需要你调接口轮询你们的后端
  • ab7eb68e3029:现在微信代扣关闭了吧,在微信支付官网都找到微信代扣的开发文档了...还是说现在需要什么特殊途径去申请?
    ab7eb68e3029:@GloryObject 这个文档我知道,在百度有收入,但是微信支付官网貌似已经没有入口了,所以才怀疑是不是已经关闭了
    GloryObject:@Jasoncm 我看了下还是能找到的 ,传送门 https://link.jianshu.com/?t=https%3A%2F%2Fpay.weixin.qq.com%2Fwiki%2Fdoc%2Fapi%2Fpap.php%3Fchapter%3D18_1
  • jdsjlzx:能不能留个联系方式啊,请教个问题
  • lin0426:你好 我们服务器下发的contract_url能在微信上 正确打开,但是用app调用sdk打开就提示 当前页面无法访问。 这是什么问题呢
    lin0426:@天天小志 联系下微信工作人员,应该是相关调用权限没有开通
    天天小志:你好,我也是直接拼接url调用微信sdk,提示当前页面无法访问,请问你是怎么解决的
    GloryObject:app 调用 sdk 打开的调用方法没问题吧
  • GloryObject:欢迎提问交流~~

本文标题:微信代扣 Android 开发流程

本文链接:https://www.haomeiwen.com/subject/prwwoxtx.html