美文网首页
微信公众号内支付相关

微信公众号内支付相关

作者: RenBob | 来源:发表于2017-02-15 16:45 被阅读145次

    业务场景

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

    业务解析

    1-支付业务分析

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

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

    接口相关

    <b>一. 微信公众号相关

    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, 这里我们就拿到了我们朝思暮想的<unionid>, 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了, 希望和各位交流技术, 共勉吧.

    相关文章

      网友评论

          本文标题:微信公众号内支付相关

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