go-wx-gateway
เป็นบริการ เกตเวย์บัญชีสาธารณะของ WeChat ที่ใช้ go-wx-apigo-wx-gateway
เป็นโปรแกรมพร็อกซีย้อนกลับสำหรับ อินเทอร์เฟซ API ของแพลตฟอร์มบัญชีอย่างเป็นทางการของ WeChatgo-wx-gateway
ไม่เพียงแต่ถ่ายโอนข้อมูลที่เกี่ยวข้องกับ API บัญชีสาธารณะ WeChat เท่านั้น แต่ยังแยกและบรรจุแพ็คเก็ตที่ส่งและรับ เพื่อให้ธุรกิจที่อยู่เบื้องหลังพร็อกซีย้อนกลับ go-wx-gateway
สามารถรับรู้ได้ง่ายขึ้นอย่างมากgo-wx-gateway
แล้ว go-wx-gateway จะสื่อสารกับบริการธุรกิจส่วนหลังผ่าน http และภาษาใดๆ ที่รองรับบริการ http ก็สามารถใช้โค้ดธุรกิจได้ go-wx-gateway
การพัฒนาบริการบัญชีสาธารณะ WeChat คือการพัฒนาบริการเว็บทั่วไปgo-wx-gateway
go-wx-gateway
เข้ามาจัดการแบบรวมศูนย์ go-wx-gateway
จะส่งต่อข้อมูลผู้ใช้และค่าสถานะเมนูไปยังบริการประมวลผลเมนูgo-wx-gateway
จัดการการอนุญาตหน้าเว็บ บัญชีสาธารณะยังสามารถชี้ไปยังบริการที่คุณต้องการ จากนั้นจึงโอนรหัสที่ได้รับ go-wx-gateway
เพื่อแลกกับการเข้าถึง openId ของผู้ใช้เพื่อรับความสมบูรณ์ ข้อมูลผู้ใช้ สำหรับวิธีนี้ โปรดดูข้อมูลการกำหนดค่า "sns-auth2"go-wx-gateway
และรหัสธุรกิจ และรูปแบบข้อมูลคือ JSON วิชาบังคับก่อน: ไป 1.11.x และสูงกว่า, git, make ได้รับการติดตั้งแล้ว
ป้อนโฟลเดอร์ใด ๆ และดำเนินการคำสั่ง
$ git clone https://github.com/rosbit/go-wx-gateway
$ cd go-wx-gateway
$ make
หากการคอมไพล์สำเร็จ จะได้รับโปรแกรมปฏิบัติการของ wx-gateway
คุณสามารถดำเนินการ ./wx-gateway -v
เพื่อแสดงข้อมูลโปรแกรม
สามารถดาวน์โหลด Linux เวอร์ชันไบนารีได้โดยตรงจากรีลีส
เป็น JSON
ตัวอย่างสามารถแก้ไขได้ผ่าน sample.conf.json
:
{
"listen-host" : " " ,
"listen-port" : 7080 ,
"services" : [
{
"name" : "一个名字,随便取" ,
"workerNum" : 5 ,
"timeout" : 0 ,
"wx-params" : {
"token" : "开发/服务器配置中的Token " ,
"app-id" : "开发/公众号开发信息中的AppId " ,
"app-secret" : "开发/公众号开发信息中的AppSecret " ,
"aes-key" : "开发/服务器配置中的EncodingAESKey。如果是明文传输,则该串为空或null "
},
"listen-endpoints" : {
"service-path" : " /wx --开发/服务器配置/服务器地址中的路径部分" ,
"redirect-path" : " /redirect --这个是微信网页授权用到的,设置菜单时都用这个路径,可选"
},
"msg-proxy-pass" : " http://yourhost.or.ip.here --这个地址指向消息/事件处理的服务,如果不处理可以为空" ,
"redirect-url" : " http://yourhost.or.ip/path/to/redirect --完全转发http请求,响应将返回微信服务号,可选" ,
"redirect-userinfo-flag" : "如果通过 snsapi_userinfo 获取参数,在redrect-url中加上特殊字符串参数,用于区分,比如 login。如果为空,使用 snsapi_base 方式获取用户参数"
},
{
"name" : "如果有其它的公众号服务,可以参考上面的信息配置" ,
"注意" : " listen-endpoints中的路径 不能 相同" ,
"视频号小店支持" : "如果是视频号小店,加上 " is-channels-ec " : true 配置项,其中的 " msg-proxy-pass " 配置的是接收视频号小店推送的事件"
}
],
"token-cache-dir" : "缓存access的根路径,这是可选的配置" ,
"common-endpoints" : {
"health-check" : " /health --这是可选的配置,用于http健康检查,该路由配置成内部可访问" ,
"wx-qr" : " /qr --这是可选的路由配置,可以配置成内部可访问的,用于生成微信二维码链接" ,
"wx-qr的参数说明" : " s=<服务名,对应services中的name>&t=temp|forever[&sceneid=<场景id>][&e=<t为temp时的有效秒数>] " ,
"wx-user" : " /user --这是可选的路由配置,可以配置成内部可访问的,用于获取用户信息,参数:s=<服务名>&o=<openId> " ,
"sns-auth2" : " /sns-auth2 -- 这是可选的路由配置,如果网页授权由其它服务接收,可以通过网页授权参数code获取用户信息" ,
"sns-auth2参数说明" : " s=<服务名,对应services中的name>&code=<网页授权得到的code>&[scope=userinfo|base|snsapi_userinfo|snsn_api_base] " ,
"short-url" : " /short-url -- 这是可选的路由配置,用于把长url生成短链接。【注】微信已经停止该服务" ,
"short-url参数说明" : "访问方法POST, POST body: s=<服务名,对应services中的name>&u=<url编码的长URL> " ,
"tmpl-msg" : " /tmpl-msg -- 这是可选的路由配置,用于发送模版消息" ,
"tmpl-msg参数说明" : "访问方法POST, POST body是JSON " ,
"tmpl-msg body例子" : { "s" : "服务名,对应services中的name " , "to" : "用户openid " , "tid" : "模版id " , "url" : "可选,跳转url " , "mp" :{ "说明" : "可选的小程序参数" , "appid" : "小程序appid " , "pagepath" : "页面路径" }, "data" :{ "模版数据key" : "数据" , "数据key2" : " ... " }},
"sign-jsapi" : " /sign-jsapi -- 这是可选的路由配置,用于生产jsapi签名" ,
"sign-jsapi参数说明" : "访问方法POST, POST body: s=<service-name-in-conf>&u=<url-calling-jsapi-in-urlencoding>,结果会返回noncestr, timestamp, signature等结果" ,
"channels-ec-order-detail" : " /channles-ec-order-detail -- 可选,用于获取视频号小店订单详情" ,
"channels-ec-order-detail参数说明" : " s=<服务名,对应services中的name>&o=<订单id> " ,
"channels-ec-refund-detail" : " /channels-ec-refund-detail -- 可选,用于获取视频号小店售后单详情" ,
"channels-ec-refund-detail参数说明" : " s=<服务名,对应services中的name>&o=<售后订单id> " ,
},
"dont-append-userinfo" : " true|false, 各种消息事件是否不增加用户信息,缺省是false,表示追加"
}
$ CONF_FILE=./wx-gateway-conf.json ./wx-gateway
หากไม่ได้กำหนดค่า msg-proxy-pass
ก็สามารถใช้ wx-gateway
เป็นเครื่องมือ ในการเปิดใช้งาน开发/服务器配置
และสามารถใช้การตอบสนองแบบสะท้อนผ่านกล่องข้อความสำหรับผู้ใช้ที่ติดตามบัญชีสาธารณะ ซึ่งเป็นเครื่องมือแก้ไขข้อบกพร่องที่จำเป็นสำหรับบัญชีสาธารณะ การพัฒนา.
การสื่อสารกับ msg-proxy-pass
msg-porxy-pass
ได้รับการกำหนดค่าด้วยคำนำหน้าที่อยู่ URL wx-gateway
จะเพิ่มข้อความและประเภทเหตุการณ์ที่ส่วนท้ายเพื่อสร้าง URL ที่สมบูรณ์ ตัวอย่างเช่น:msg-proxy-pass
ได้รับการกำหนดค่าที่ http://wx.myhost.com/msghandler
wx-gateway
ได้รับข้อความของผู้ใช้ มันจะส่งต่อข้อความไปที่ http://wx.myhost.com/msghandler/msg/text
wx-gateway
ได้รับเหตุการณ์ความสนใจของผู้ใช้ใหม่ มันจะส่งต่อข้อความไปที่ http://wx.myhost.com/msghandler/event/subscribe
msg
และ event
เป็นประเภทการส่งต่อ text
และ subscribe
เป็นข้อความเฉพาะหรือชื่อกิจกรรมPOST
และผลลัพธ์คำขอ/การตอบกลับทั้งหมดคือ JSON
JSON ของเนื้อหาคำขอจะถูกแปลงจากรูปแบบ XML ของข้อความ API บัญชีอย่างเป็นทางการของ WeChat สำหรับช่องเฉพาะ คุณยังสามารถอ้างถึง API บัญชีอย่างเป็นทางการของ WeChat ได้msg
ประกอบด้วย ข้อความ รูปภาพ เสียง วีดีโอ วิดีโอ สั้น ตำแหน่ง ลิงก์event
ประกอบด้วย CLICK , VIEW , SCAN , Subscribe , Unsubscribe , Location , LOCATION , pic_sysphoto , pic_photo_or_album , pic_weixin , scancode_waitmsg , scancode_push , MASSSENDJOBFINISH , TEMPLATESENDJOBFINISHmsg
text
ชื่อURL: <msg-proxy-pass>/msg/text
เนื้อหาข้อความขอ:
{
"ToUserName" : "公众号的id " ,
"FromUserName" : "发送消息的用户的openId " ,
"CreateTime" : 1556088649 ,
"MsgType" : " text " ,
"Content" : "用户发送的文本内容" ,
"MsgId" : " 22277834746191186 " ,
"说明" : "以上为必传信息,如果配置文件中dont-append-userinfo为false,则有下面的信息" ,
"userInfo" : {
"openid" : " " ,
"nickname" : " " ,
"headimgurl" : " " ,
"city" : " " , "province" : " " , "country" : " " ,
"sex" : 1 ,
"language" : " " ,
"等等" : "各种信息"
},
"userInfoError" : "如果取userInfo发生错误,则有错误信息,否则该值为空"
}
การตอบสนอง
หากสำเร็จจะต้องตอบกลับข้อความ 200 รูปแบบเนื้อหาข้อความ
{
"type" : " text " ,
"msg" : "需要返回给用户的消息内容"
}
"type" อาจเป็น "เสียง", "วิดีโอ", "รูปภาพ" ฯลฯ และ "msg" คือ "mediaId" ที่เกี่ยวข้อง
event
ชื่อ subscribe
เนื้อหาข้อความขอ:
{
"ToUserName" : "公众号的id " ,
"FromUserName" : "关注公众号的用户的openId " ,
"CreateTime" : 1556088649 ,
"MsgType" : " event " ,
"Event" : " subscribe " ,
"EventKey" : " qrscene_场景ID(新关注) 或 场景ID(扫码) " ,
"Ticket" : "如果是二维码扫码,是二维码的票据" ,
"说明" : "以上为必传信息,如果配置文件中dont-append-userinfo为false,则有下面的信息" ,
"userInfo" : {
"openid" : " " ,
"nickname" : " " ,
"headimgurl" : " " ,
"city" : " " , "province" : " " , "country" : " " ,
"sex" : 1 ,
"language" : " " ,
"等等" : "各种信息"
},
"userInfoError" : "如果取userInfo发生错误,则有错误信息,否则该值为空"
}
การตอบสนอง
เช่นเดียวกับข้อความ
หากสำเร็จจะต้องตอบกลับข้อความ 200 รูปแบบเนื้อหาข้อความ
{
"type" : " text " ,
"msg" : "需要返回给用户的消息内容"
}
"type" อาจเป็น "เสียง", "วิดีโอ", "รูปภาพ" ฯลฯ และ "msg" คือ "mediaId" ที่เกี่ยวข้อง
event
ร้านค้าวิดีโอ ชื่อ channels_ec_order_pay
เนื้อหาข้อความขอ:
{
"ToUserName" : "视频号小店的id " ,
"FromUserName" : "在视频号小店购物的用户的openId " ,
"CreateTime" : 1556088649 ,
"MsgType" : " event " ,
"Event" : " channels_ec_order_pay " ,
"order_info" : {
"order_id" : 3705115058471208928 , // NOTE: 文档处是字符串,实际返回的整数
"pay_time" : 1658509200
}
}
การตอบสนอง
การสื่อสารกับ redirect-url
จัดการคำขออนุมัติหน้าเว็บ สำหรับการกำหนดค่าที่เกี่ยวข้องของบัญชีสาธารณะ โปรดดูเอกสาร WeChat URL โทรกลับต้องการเพียงชื่อโดเมนของ wx-gateway
redirect-url
กำหนดค่า URL เช่น
redirect-url
คือ http://wx.myhost.com/menu/path/to/redirect
wx-gateway
ได้รับการร้องขอหน้าเว็บ มันจะส่งต่อข้อความไปยัง URL ข้างต้นPOST
ผลลัพธ์การตอบสนองจะถูกกำหนดโดยบริการประมวลผลการส่งต่ออย่างสมบูรณ์ เพื่อให้ wx-gateway
รับเหตุการณ์การคลิกเมนู URL จะต้องเขียนในรูปแบบที่ได้รับอนุญาตจากหน้าเว็บบัญชีอย่างเป็นทางการ:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=在这里填公众号的AppId&redirect_uri=http%3A//wx.myhost.com/这是redirect-path配置的值&response_type=code&scope=snsapi_base&state=这个值用于区分菜单项#wechat_redirect
wx-gateway
อย่างถูกต้องเท่านั้นที่จะสามารถรับเหตุการณ์เมนู รับ openId ของผู้ใช้ที่คลิกเมนูผ่านโค้ด และส่งต่อไปยัง redirect-url
ขอรูปแบบข้อความเพื่อขอ redirect-url
{
"requestURI" : "转发请求的URI,这是微信服务器访问gateway的URI,可以根据实际情况做进一步判断" ,
"appId" : "公众号的AppId,如果同时处理多个公众号,可以用来区分来源" ,
"openId" : "点击菜单的用户的openId " ,
"state" : "在菜单配置中的state的值,用于区分菜单项" ,
"userInfo" : {
"subscribe" : 1 ,
"openid" : " " ,
"nickname" : " " ,
"sex" : 1 ,
"language" : " " ,
"province" : " " ,
"city" : " " ,
"country" : " " ,
"headimgurl" : " " ,
"subscribe_time" : 1386160805 ,
},
"userInfoError" : "请求userInfo时的错误信息,如果为空表示没有错误"
}
ส่วนหัวคำขอ HTTP และคุกกี้ทั้งหมดจะถูกส่งต่อไปยัง redirect-url
ซึ่งสามารถประมวลผลได้ตามความต้องการ
รูปแบบข้อความผลการตอบกลับ
redirect-url
รวมถึง