这是我第二家实习公司整理的资料,虽然在公司短短工作了两个月,但我学到了很多业务开发的经验,特别是微信相关开发的方面,我认为这方面的资料还是非常丰富的,以下材料均经过脱敏处理
一、微信公众号
1. 用户信息相关
详情参考微信官方文档
基础获取用户信息在此不再赘述。
Unionid机制会在下文中阐述。
代码示例:
图1.1.1公众号服务端获取用户信息
2. 服务器消息管理
概述:公众号开启服务器配置后,微信将会向此服务器推送公众号事件消息,包括用户关注、取消关注、发送消息(文本、图片、音频、视频等)、点击菜单等。服务器可以根据业务逻辑做出相应处理。
基础介绍
开启位置:
微信公众平台-开发-基本配置
图1.2.1微信公众号开启消息服务器
点击启用服务器配置
配置消息服务器地址:
图1.2.2微信公众号消息服务器配置
详情请参考消息服务器接入指南
注意:
- 首次接入服务器时公众平台配置的自定义菜单将会失效(微信切换为接口设定的公众号菜单),需开发者提前备份公众号菜单,在消息服务器上线时使用接口重新生成自定义菜单。
图1.2.3开启消息服务器后自定义菜单被禁用
-
首次接入消息服务器或者更换服务器接口时,微信会执行消息校验(具体参考消息服务器接入指南),程序上线时不要忘记此情况。
-
接受到消息后异常应及时处理,勿随意抛出,否则用户将看到“你的服务器未正确响应”等字样。
代码示例
图1.2.4微信消息服务器接口示例
此示例为明文模式,包括消息服务器验证以及服务器消息接受。
图1.2.5微信消息服务器接口逻辑处理示例
图1.2.6微信消息服务器接口消息反馈示例
3. 带参数的二维码
概述:用户可以通过扫描二维码的方式关注公众号,微信支持生成带参数的公众号二维码(调用API),在用户扫描并关注时微信会向消息服务器推送相关参数。
应用场景:拉粉业务需求,需要统计各业务人员拉粉数量。
基础介绍
详情参考微信官方文档
此功能可与“消息服务器管理”配合使用
主要用途:用户渠道推广分析和用户帐号绑定等场景分析。
代码介绍
图1.3.1生成带参数二维码示例
获取微信公众号Access_token,生成带参数的二维码(ticket)。
公众号关注事件分析示例:
图1.3.2微信公众号消息服务器用户订阅事件解析处理
图1.3.4带参数二维码用户订阅事件解析处理
基础逻辑介绍:
-
程序创建商务人员businessMan,并为其生成独立ticket,程序凭借ticket生成二维码,用户可扫描此二维码关注公众号。
-
用户扫描二维码关注公众号时微信会向注册了的消息服务器接口推送相关事件消息(subscribe)并携带ticket参数(若用户扫描默认二维码进行关注则不存在此参数)。
-
程序接收到ticket后进行相关逻辑处理
4.模板消息
文档地址:https://mp.weixin.qq.com/advanced/tmplmsg?action=faq&token=1388026054&lang=zh_CN
5.微信控件
使用前准备
绑定js安全域名
图1.5.1微信公众号绑定js安全域名
代码示例
- 后台获取ticket
图1.5.2服务器获取ticket示例
注意:获取ticket时需要调用jssdk的页面完整地址。为防止不必要的麻烦建议前端直接向此接口传输当前页面地址(注意编码)
- 前端
图1.5.2前端签名示例
图1.5.3前端调用(分享好友、朋友圈)示例
二、微信小程序
1.小程序申请
普通申请
第一步:前往微信小程序官方网站
第二步:点击注册,填写相关信息
图2.1.1小程序注册
第三步:注册完成,登录微信公众平台
快速注册小程序(推荐)
此时你需要有已经认证过的公众号,适用于业务拓展至小程序的场景。
第一步:登录微信公众平台,进入小程序选项
第二步:点击添加小程序->快速注册小程序(需要服务号)
图2.1.2小程序快速注册
图2.1.3管理员扫码后允许复用资质
图2.1.4选择复用资质
图2.1.4填写小程序相关信息、注册完成
2.页面开发
官方开发文档,建议开发之前全面浏览开发文档减少不必要的踩坑。
图2.2.1下载微信小程序开发工具
图2.2.2微信小程序开发工具界面
参考uniapp框架。
3.素材管理
背景:微信小程序上传代码限制为2048K
建议将静态资源缓存至CDN。
腾讯云
图2.3.1腾讯云展示
图2.3.2腾讯云素材管理界面
图2.3.3腾讯云管理平台界面
特点:免费版本存储量可满足,CDN流量较小。较小走量小程序可以使用。否则需选择付费版本。
图2.3.2腾讯云创建素材桶,以及默认资费标准
阿里云:
图片等静态资源存放于阿里云oss存储中。
4.代码管理
图2.4.1微信开发者功能代码分支管理界面
建议使用gitlab,具体使用方式此文档暂不介绍
5.上线流程
- 确认代码
图2.5.1 小程序体验版本为本人上传
图2.5.2填写版本信息
- 确认版本
图2.5.3小程序代码审核、发布界面
图2.5.4小程序代码设置为体验版
选择代码版本设置为体验版并提交审核
- 经验总结:
A)代码开发过程中可实机预览
图2.5.5小程序开发工具实机预览
图2.5.6调试设置
注意勾选“不校验合法域名选项”
开发版体验人微信必须为本小程序开发人员。
B)功能测试
代码提测后提交代码到线上并设置为体验版
注:若上次体验版本非本人提交,此次代码提交不会自动设置为体验版本,需联系小程序管理人员或开发者将此版本设置为体验版
图2.5.7微信小程序管理平台成员管理界面
测试人员必须拥有体验权限
图2.5.8小程序体验成员
管理人员有权限增加项目成员(需要项目成员微信号),项目成员有权限增加体验人员(需要体验者微信号)。被添加人员微信需开启允许被搜索。
体验人员扫描体验版小程序二维码即可进入小程序测试
图2.5.9体验版小程序入口
若程序服务器为本地测试服务器,体验者需要注意连接局域网WIFI并打开小程序调试
三、微信开放平台
1.应用管理
图3.1.1微信开发平台应用管理
-
移动应用开发:
增加应用传播, 通过分享给微信好友,分享到朋友圈,你的移动应用被用户进行快速社交传播。
支持微信收藏、微信支付
-
网站应用开发:
微信联合登录、支持账号统一
微信公众号:账号统一
微信小程序:账号统一
-
第三方平台:
可以通过一键登录授权给第三方开发者,来完成相关能力。
2.Unionid机制
微信公众号获取微信用户信息可获取用户在此公众号下的唯一openid,当公众号绑定至微信开放平台后,通过授权获取的参数中会增加unionid参数,且在同一开放平台下,多个微信公众号(小程序)unionid一致。
注意:普通情况下开发者可以使用“获取ACCESS_TOKEN 后获取微信用户信息”的方式获取微信账号unionid,如下
图3.2.1获取unionid代码示例
微信小程序获取unionid的方式特殊:
场景说明:小程序A与公众号B同时绑定与同一个微信开放平台C中。用户U从为进入过B服务程序(未授权B服务获取用户信息)。
场景1:U在首次进入B服务程序时使用上述获取用户信息的方式可以获取unionid相关信息(在首次进入时微信将展示授权提醒,用户同意授权后程序正常执行)。此后U进入A时使用上述用户信息的获取方式同样可以获取uinonid信息。
场景2:U在从未进入B服务程序的情况下直接进入A服务程序,上述获取用户信息的方式将无法获取unionid(openid获取正常),但小程序可以通过wx.getUserInfo(Object object)方法获取用户信息(U确认授权的情况下)。
3.网站应用
应用实例:
收券吧pc端:http://shouquanba.net/login
图3.3.1授权吧pc端登录
用户扫描二维码
图3.2.1收券吧pc端用户授权登录
图3.2.1收券吧pc端用户授权登录,页面提示
用户点击同意后页面自动跳转至页面中配置的地址中完成登录。接口中通过微信重定向时携带的code参数获取用户信息(openid、unionid、昵称、头像等)、
图3.2.1收券吧pc端用户授权登录成功
四、微信支付
1.公众号普通商户支付
A>你需要准备
i) 微信公众号/小程序,本文档以公众号为例
ii) 微信公众号通过企业认证并开通微信支付
注:主体为个人的公众号无法认证
iii) 开通微信支付后得到微信商户号,登录微信商户平台获取交易密钥、证书
注:获取方法具体参照《微信对接说明文档》
iv) 开发电脑开通对外端口号(可咨询技术中心运维部邓凯),并将对外端口号绑定域名
v) 获得域名后配置:
微信公众号
图4.1.1微信支付相关公众号配置
配置上图中的业务域名、JS接口安全域名、网页授权域名配置(需要按照指引进行服务器认证)
图4.1.2微信支付相关商户平台配置
微信商户平台,产品中心此处需要将域名配置这里
这是你需要准备的东西示例:
微信公众号APPID: wx45ed1be353d****
微信公众号secret: 79c874292849b1cebd8c90e6586****
微信支付商户号:1507597***
微信支付交易密钥:929447e3ce9726bf020b89494ca****
微信支付证书:***.p12文件(微信商户平台下载)
微信支付下单地址:https://api.mch.weixin.qq.com/pay/unifiedorder
微信支付退款地址:https://api.mch.weixin.qq.com/secapi/pay/refund
你的服务器域名(例):http://wx1.ejiaofei.com
B>支付开发步骤:
i)用户登录授权(具体流程见《微信对接说明文档》,此处获取用户的openid
代码示例:
图4.1.3获取用户信息授权
图4.1.4获取用户信息
注:获取用户信息的方法见微信公众号开发文档或参考代码实例;
ii)用户处于公众号环境中向后台发送下单请求,此时请求接口时发送产品信息等(用于服务器计算支付金额。注意此时勿发送支付金额防止请求被拦截篡改)
服务器计算金额后参照微信支付接口文档拼装参数发送下单请求(可参考微信支付SDK)
代码示例:
图4.1.5公众号支付下单代码示例
注:下单IP是下单用户的请求ip(调用微信支付API的机器IP),获取方式:
图4.1.6微信支付获取请求ip
图4.1.7解析outParam
上图中“pay”为下单返回参数, 获取灰色框中的6个参数用于前端唤起微信支付控件;
参数解释见下图
前端:
图4.1.8前端唤起微信支付控件
支付通知:
用户在支付完成后微信服务器将对下单时填入的回调地址进行通知,包含支付的状态信息:
图4.1.9接收微信支付通知
验证完签名之后可以读取map中的内容用于业务逻辑处理
此时微信支付的整体流程已经基本完成
C>退款步骤
拼装参数,向微信退款地址发起请求
图4.1.10微信退款代码示例
图4.1.11微信退款签名
代码解释:
退款动作需要基于付款订单
填写参数时out_trade_no为付款订单的out_trade_no
退款金额小于等于付款订单的支付金额,当小于时为部分退款
out_refund_no为退款订单号,不可重复
退款请求需要验证证书(**.p12文件,可到商户平台下载)
代码参考微信支付SDK
图4.1.12微信退款证书
图4.1.13微信退款证书、请求
退款正确响应:
图4.1.14发起退款成功响应
此时已发起退款请求成功,用户微信中将接受到退款发起通知(若支付时使用零钱支付则不会有该通知):
图4.1.15用户收到退款发起通知
退款成功后微信服务器将向退款时填写的notify_url通知退款状态,且用户微信将接收到退款到账通知:
图4.1.16用户收到退款到账通知
平台服务器处理微信退款回调:
图4.1.17服务器处理微信退款通知
注意:AES解密失败请检查jre环境中lib/security下的local_policy.jar 和US_export_policy.jar
此时退款的整个流程结束
2.公众号服务商支付
你需要准备微信支付普通商户具备的所有东西;
A>服务商信息:
微信服务商账号:(此处以中天通讯为例)
AppId: wx8e****f817f2078
Secret: f5ecea00d****40754ecc5adcf5d45d
商户号:150****9491
配置:
接口调用之前需要中天通讯方(服务商)将我方(普通商户)的APPID、支付授权目录进行配置。
具体操作需要咨询服务商。联系人:技术中心副总-公强
上述配置完成后进行实例测试:
图4.2.1微信服务商支付下单示例
图18中的ip地址为调用微信支付API的机器IP,此demo中调用微信支付的机器为本机
图4.2.2微信支付下单成功响应
经验总结,确认正确的配置如下:
appid:服务商公众号appid
sub_appid:普通商户appid
sub_openid:普通商户会员openid
mch_id:服务商商户号
sub_mch_id:普通商户商户号
发起请求时:
交易密钥:服务商交易密钥
商户号:普通商户商户号
成功下单时响应如图19,与普通商户下单比较多‘sub_mch_id’、‘sub_appid’
前端支付所需要的信息与图7、图8一直
微信支付回调处理方式与普通商户支付处理方式一致。
B>服务商退款:
代码参考
图4.2.3服务商退款代码示例
注:此处的appid为服务商appid(中天通讯)
图4.2.3服务商退款签名
开发总结:
mch_id、appid为服务商信息
sub_mch_id、sub_appid为普通商户信息
退款时签名使用服务商的交易密钥(此处与支付时一致)
发起退款响应、通知数据解析与普通商户退款一致,此处不重复。
3.H5支付
基础准备内容:
A>H5支付特殊准备:
- 申请H5支付
图4.3.1申请微信H5支付
图4.3.2申请微信H5支付2
图4.3.3申请微信H5支付3
申请时需要添写H5支付目录,申请成功后可以修改和删除掉
图4.3.4申请微信H5支付4
图4.3.5微信H5支付开通完成
- 配置H5支付目录
图4.3.6商户平台开发配置
图4.3.7配置H5支付域名
B>下单流程
i) 代码示例
图4.3.8微信H5支付下单代码示例
注意:统一下单代码与公众号支付相似
区别1:支付方式为MWEB,公众号支付为JSAPI
区别2:openid参数为非必传
经验介绍:下单完成后唤起支付时提示:下单账号与支付账号不一致,请核实后再支付(如下图)
图4.3.9H5支付域名未配置
此时检查统一下单的参数列表,去除openid参数即可。
区别3:下单成功后返回参数列表中增加mweb_url(支付跳转连接),此连接有效时间为5分钟。
ii) 常见问题
回调页面:
正常流程用户支付完成后会返回至发起支付的页面,如需返回至指定页面,则可以在MWEB_URL后拼接上redirect_url参数,来指定回调页面。
如,您希望用户支付完成后跳转至https://www.wechatpay.com.cn,则可以做如下处理:
假设您通过统一下单接口获到的MWEB_URL= https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx20161110163838f231619da20804912345&package=1037687096
如果不拼接redirect_url 用户支付完成或者取消支付后将跳转至支付发起页面。
请求支付连接后出现以下几种情况:
商家参数格式有误,请联系商家解决:
请勿直接将获取到的mweb_url直接输入的浏览器地址中请求
商家存在未配置的参数,请联系商家解决:
检查请求mweb_url的服务器域名是否在H5支付授权域名列表中(4.3.1.7)
支付请求已失效,请重新发起支付:
支付连接超时(超时时间5分钟)
请在微信外打开订单,进行支付:
H5支付不能在微信环境中使用。
详情参考微信支付官方开放文档
iii) 前端操作
服务器将下单操作获取的mweb_url响应给前端。前端直接请求即可(window.location.href=mweb_url)
C>退款
同微信公众号支付退款
4.Native支付
A>介绍:
用户扫描商户展示在各种场景的二维码进行支付。
步骤1:商户根据微信支付的规则,为不同商品生成不同的二维码,展示在各种场景,用于用户扫描购买。
步骤2:用户使用微信“扫一扫”扫描二维码后,获取商品支付信息,引导用户完成支付。
步骤3:用户确认支付,输入支付密码。
步骤4:支付完成后会提示用户支付成功,商户后台得到支付成功的通知,然后进行发货处理。
B>下单流程
代码示例:
图4.4.1微信NATIVE支付下单代码示例
相比于普通商户公众号支付:
区别1:交易类型(trade_type)为NATIVE
区别2:参数product_id 为必填,商户自定义
区别3:下单成功后返回参数列表中二维码地址code_url
前端操作:
服务器将code_url返回给前端页面,前端将此地址转换为二维码展示在页面上即可(生成二维码的步骤可以由后台完成)。
C>退款
同微信公众号支付退款