微信公众号内支付相关

业务场景

最近在做虚拟货币的"反向提现"(天朝不允许这么做, 只是擦边球啦), 所以起个高大上的名字"兑现". 我司创业公司, 财力单薄, 银联2000+的申请费, 千8的手续费自然让人望而却步. 于是乎苦思冥想下, 选择了微信做反向账户. 调研了n多文档, 结合自己的老司机经验, 选择了微信公众号的企业打款做给用户定向打款的业务功能组.

业务解析

微信公众号内支付相关_第1张图片
1-支付业务分析

那么好了从上面的业务分析图1中, 我们可以知道, 在已有技术资源渠道选定的情况下, 如何解决在移动app中实现公众号的企业打款api, 就成了解决业务问题的关键.

微信公众号内支付相关_第2张图片
2-支付业务分析

如业务分析图2中所示, 业务拆解分用户id转换, 打款api接入两步.


接口相关

一. 微信公众号相关

1.获取access_token

文档地址: https://mp.weixin.qq.com/wiki/11/0e4b294685f817b95cbed85ba5e82b8f.html

请求方式: GET

请求地址:

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

参数说明:

参数 必填 说明
grant_type 获取access_token填写client_credential
appid 公众号的唯一id
secret 公众号的密钥

返回示例:

200 OK
Connection: close
Date: Wed, 15 Feb 2017 02:15:24 GMT
Content-Type: application/json; encoding=utf-8
Content-Length: 154
{
    "access_token": "zoma7kz-VdhDMDraUBrmW3ouVAa-64YAKE1Ce_LDAhMCftwcq1fjFE2X0WcjFUgWAcYQTTLYIKiK-I2OncrHMZ2_vpPvV9mwUvSvoVJTC2gKKUdAHASSC", 
    "expires_in": 7200
}

2.根据access_token得到open_id列表

文档地址: https://mp.weixin.qq.com/wiki/0/d0e07720fc711c02a3eab6ec33054804.html

请求方式: GET

请求地址:

https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID

参数说明:

参数 必填 说明
access_token 调用接口的凭证
next_openid 第一个拉取的OPENID,不填默认从头开始拉取

返回示例:

有数据更新时:

200 OK
Connection: close
Date: Wed, 15 Feb 2017 07:06:27 GMT
Content-Type: application/json; encoding=utf-8
Content-Length: 272
{
    "total": 6, 
    "count": 6, 
    "data": {
        "openid": [
            "olSBQxKIV7FCXx7WW0iQsXEoXE9k", 
            "olSBQxENCojqbp_c_11lOIGempI4", 
            "olSBQxILNooroKuHtNc9ioDMUsPQ", 
            "olSBQxISsjAh_kwrxTmjPZ_56NoQ", 
            "olSBQxPay4YhRs2kBCXrLMNDxxjs", 
            "olSBQxFQfuqw8yJcbyX3INjBxIGs"
        ]
    }, 
    "next_openid": "olSBQxFQfuqw8yJcbyX3INjBxIGs"
}

没有数据更新时:

200 OK
Connection: close
Date: Wed, 15 Feb 2017 07:13:02 GMT
Content-Type: application/json; encoding=utf-8
Content-Length: 38
{
    "total": 6, 
    "count": 0, 
    "next_openid": ""
}

*特别说明返回示例中的next_openid的含义发生变化: 此时代表拉取用户列表的最后一个id! *

3.根据openid获取用户的基本信息

文档地址: https://mp.weixin.qq.com/wiki/14/bb5031008f1494a59c6f71fa0f319c66.html

请求方式: GET

请求地址:

https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

参数说明:

参数 必填 说明
access_token 调用接口的凭证
openid 普通用户的标识,对当前公众号唯一
lang 返回国家地区语言版本

返回示例:

200 OK
Connection: close
Date: Wed, 15 Feb 2017 07:20:28 GMT
Content-Type: application/json; encoding=utf-8
Content-Length: 421
{
    "subscribe": 1, 
    "openid": "olSBQxKIV7FCXx7WW0iQsXEoXE9k", 
    "nickname": "BobRen࿐", 
    "sex": 1, 
    "language": "zh_CN", 
    "city": "朝阳", 
    "province": "北京", 
    "country": "中国", 
    "headimgurl": "http://wx.qlogo.cn/mmopen/8uptaMS0ibfVs1LyqliciaiajlKIcWYSMZd2B9JgK3g0qr63oyz18jUppZFa3naGS3r38NSAibLZvpicESZjDia6kIIv5f4mXW7s1ZI/0", 
    "subscribe_time": 1482460774, 
    "unionid": "IamUnionid", 
    "remark": "", 
    "groupid": 0, 
    "tagid_list": [ ]
}

以我为例, ok, 这里我们就拿到了我们朝思暮想的, got it!

截止到此, 微信公众平台的部分搞定. 至于用户数据更新上, 建议用定时任务, 每天0:00或者几个静态时间点用next_openid拉取最新的数据.


二. 微信开放平台-移动app

通过"微信登陆授权"拿到unionid

文档地址:

https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317851&token=4fab694b3d1260a639eeb0b5a98d81cf7919cacb&lang=zh_CN
具体api指向如下:
微信登陆-> 拉起微信-> 用户授权 -> code -> accesstoken && unionid

注意: 兑现功能的前置条件, 需要调起微信登陆!!! 这个设计有点奇葩, 但是如果用户信息未绑定微信账号, 只能如此, 暂时没有更好的处理方案.
存储相应的unionid到我司用户信息表中, 完成公众号 到 app的id信息关联, 齐活儿~


三. 业务实现方式总结

优点:

  • 财务分离, 公司进账账户和出账账户完全分离, 一定程度上保证了财务安全.
  • 较低的手续费, 0.6%的手续费, 感觉即使不盈利也像是在赚钱.
  • 一定程度上降低了开发成本, 完全对着微信的api巴拉巴拉就行了.(不要和我说ping++, 提现功能解决不了)
  • 现成的微信流水替代了财务系统的开发
  • 提现的自动化api降低了客服的工作量

不足:

  • 申请账号, 真尼玛麻烦, 各种资料劳神伤身
  • 中间的穿域授权完全依托于微信登陆, 对于高质用户而言, 体验很一般
  • 要提现, 还要关注微信公众账号, 累不累?(当然你也可以为, 解决刚性需求-- RMB, 顺便带点营销的小伎俩, 哈哈)
  • 这么多, 这么多, 好久不用markdown, 好手残, 好手残

最后,
不得不说, 我的方案是有点反人类设计的方案, 其灵感也是在麻辣诱惑任职时, 为了解决公众号二次开发的商城退款问题而找的api, 并设计的方案, 在这个新平台上能实现并完善这个方案还是很欣慰的, 哈哈~

最后的最后, 我做码农的时间不是很长, 但总归是快乐的,不写业务代码也快半年了, 在项目管理和产品设计的scope也谈不上精进. 27的年龄, 会有些新的思考, 新的认知, 当然尽管发现自己渐乎是有些平庸的, 但总会想要挣扎下. 太久不写, 有些verbose了, 希望和各位交流技术, 共勉吧.

你可能感兴趣的:(微信公众号内支付相关)