记录一次微信发票---收取授权完成事件推送(多域名分发)

1、背景:

1.1 公司在开发电子发票插入微信卡包功能,涉及到用户授权成功之后,回调我们的问题,不多说了,搞起来。

2、流程步骤:

第一步:先在微信公众号里配置好回调链接:

记录一次微信发票---收取授权完成事件推送(多域名分发)_第1张图片

 第二步:编写好校验微信签名相关逻辑:

 第三步:用户授权成功之后,收取授权完成事件推送:

微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。关于重试的消息排重,推荐使用FromUserName + CreateTime 排重。假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试。

返回结果

返回结果为XML格式,字段如下:

参数 类型 是否必填 描述
ToUserName String 公众号标识
FromUserName String 用户openid
CreateTime Int 事件时间
MsgType String 固定为event
Event String 固定为user_authorize_invoice
SuccOrderId String 授权成功的订单号,与失败订单号两者必显示其一
FailOrderId String 授权失败的订单号,与成功订单号两者必显示其一
AuthorizeAppId String 获取授权页链接的AppId
Source String 授权来源,web:公众号开票,app:app开票,wxa:小程序开票,wap:h5开票

示例代码



   
   
   1475134700
   
   
   
    < AuthorizeAppId > 

 PS: 这里按照微信的文档,获取到微信返回值并做自己的逻辑。

第四步:由于我们公司有多个环境,但是微信直接配置一个回调地址,所以需要通过一个服务器分发到其他环境:

A:先按照一定规则生成订单号:例如: dev_001,用于区分不同的订单来源以确定最后分发的环境;

B:处理出环境之后,利用curl方式进行请求;

C:回复微信,一般回复字符串 success。

代码如下:

记录一次微信发票---收取授权完成事件推送(多域名分发)_第2张图片

 PS:这里给自己记录下:本来想采用 header("location:xxxx")实现跳转的,结果始终都做不到,网络找了一圈,有的说是header前面不能有输出,空格等等,还有的说location与“:”之间不能有空格,花了我一整天时间,结果还是没搞掂,后面问了一个大佬,说:“只有别人跳转到你的接口上来你的接口才会跳,不是跳转过来的话话你这边也不会跳转“。

后面改成利用curl方式,果然就没问题了。

这也算是一次微信开发的经历吧,总结下来,微信文档说明很不详细,很多坑需要去趟,而且人工支持基本没有,希望这篇文章能帮帮同样趟坑的小伙伴们!

你可能感兴趣的:(记录一次微信发票---收取授权完成事件推送(多域名分发))