微信公众号内支付相关

2017-02-15  本文已影响145人  RenBob

业务场景

最近在做虚拟货币的"反向提现"(天朝不允许这么做, 只是擦边球啦), 所以起个高大上的名字"兑现". 我司创业公司, 财力单薄, 银联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信息关联, 齐活儿~


三. 业务实现方式总结

优点:

不足:

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

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

上一篇下一篇

猜你喜欢

热点阅读