โปรเจ็กต์ปัจจุบันมุ่งเน้นไปที่การห่อหุ้มอินเทอร์เฟซของเว็บไซต์โซเชียลเน็ตเวิร์กเป็นหลัก ในระยะแรกของโปรเจ็กต์จะมุ่งเน้นไปที่การพัฒนา SDK แพลตฟอร์ม WeChat เป็นหลัก ซึ่งจัดประเภทง่ายๆ ตามระดับฟังก์ชันอินเทอร์เฟซ
โปรเจ็กต์นี้ให้บริการในรูปแบบของไลบรารีมาตรฐาน ซึ่งหมายความว่าสามารถรองรับทั้ง .Net Framework (4.6 ขึ้นไป) และ .Net Core
หากคุณมีคำถามใด ๆ คุณสามารถถามในบัญชีอย่างเป็นทางการ (osscore):
1. โมดูลเชื่อมต่อการอนุญาต (Oauth)
คำสั่งการติดตั้งภายใต้ nuget: Install-Package OSS.Clients.Oauth.WX
การอนุญาตผู้ใช้ (oauth2.0) ข้อมูลการอนุญาตผู้ใช้พื้นฐาน
2. โมดูลข้อความเซสชัน (ผงชูรส)
คำสั่งการติดตั้งภายใต้ nuget: Install-Package OSS.Clients.Msg.Wechat
การจัดการเซสชั่น การรับข้อมูลเซสชั่นของผู้ใช้และการตอบกลับที่เกี่ยวข้อง
3. ฟังก์ชั่นขั้นสูงของบัญชีสาธารณะ (แพลตฟอร์ม)
1.โทเค็นการเข้าถึง
nuget下安装命令:**Install-Package OSS.Clients.Platform.WX.AccessToken**
这里主要是获取AccessToken接口的封装
WXPlatTokenApi - 公众号的正常Token接口
WXAgentPlatTokenApi - 代理平台的Token的接口
2. ส่วนข้อมูลพื้นฐาน
nuget下安装命令:**Install-Package OSS.Clients.Platform.WX.Basic**
这里主要是基础信息相关接口
WXPlatUserApi - 微信公众号用户信息相关接口
WXPlatIpApi - 微信服务器信息接口
WXPlatKfApi - 微信客服接口
WXPlatMassApi - 微信群发消息相关接口
WXPlatMediaApi - 微信素材相关接口
WXPlatMenuApi - 微信菜单相关接口
WXPlatQrApi - 微信二维码相关接口
3.อินเทอร์เฟซอื่นๆ
nuget下安装命令:**Install-Package OSS.Clients.Platform.WX**
这里主要是公众号其他相关接口
WXPlatAssistApi - 微信jssdk辅助接口
WXPlatCardApi - 微信卡信息相关接口
WXPlatShakeApi - 微信摇一摇相关接口
WXPlatAppApi - 微信小程序相关接口
WXPlatStatApi - 微信统计相关接口
WXPlatStoreApi - 微信门店管理相关接口
4. อินเทอร์เฟซแพลตฟอร์มตัวแทน
nuget下安装命令:**Install-Package OSS.Clients.Platform.WX.Agent**
这里主要是公众号代理服务平台的相关接口
1. การเรียกการอนุญาตพื้นฐาน (ใต้โฟลเดอร์ sns)
//声明配置信息
private static AppConfig m_Config = new AppConfig ( )
{
AppSource = "11" ,
AppId = "你的appId" ,
AppSecret = "你的secretkey"
} ;
// 接口api实例
private static WXOauthApi m_AuthApi = new WXOauthApi ( m_Config ) ;
// 获取微信授权地址
public ActionResult auth ( )
{
var res = m_AuthApi . GetAuthorizeUrl ( "http://www.social.com/wxoauth/callback" ,
AuthClientType . WXPlat ) ;
return Redirect ( res ) ;
}
// 微信回调页,此页面获取accesstoken 获取用户基础信息
public ActionResult callback ( string code , string state )
{
var tokecRes = m_AuthApi . GetAuthAccessToken ( code ) ;
if ( tokecRes . IsSuccess ( ) )
{
var userInfoRes = m_AuthApi . GetWXAuthUserInfo ( tokecRes . AccessToken , tokecRes . OpenId ) ;
return Content ( "你已成功获取用户信息!" ) ;
}
return Content ( "获取用户授权信息失败!" ) ;
}
2. การโทรเซสชัน (ภายใต้โฟลเดอร์ Msg)
ก. ก่อนอื่นให้ประกาศข้อมูลการกำหนดค่า
// 声明配置
private static readonly WXChatServerConfig config = new WXChatServerConfig ( )
{
Token = "你的token" ,
EncodingAesKey = "你的加密key" ,
SecurityType = WXSecurityType . Safe , // 在微信段设置的安全模式
AppId = "你的appid" //
} ;
ข. กำหนดตัวจัดการการประมวลผล (คุณสามารถใช้ตัวจัดการของคุณเองได้ เพียงสืบทอดจาก WXChatHandler)
private static readonly WXChatHandler msgService = new WXChatHandler ( config ) ;
c. เมื่อโทรเพียงแค่ส่งเนื้อหาที่ร้องขอปัจจุบันไปที่ทางเข้าโปรแกรม:
using ( StreamReader reader = new StreamReader ( Request . InputStream ) )
{
requestXml = reader . ReadToEnd ( ) ;
}
try
{
var res = msgService . Process ( requestXml , signature , timestamp , nonce , echostr ) ;
if ( res . IsSuccess ( ) )
return Content ( res . data ) ;
}
catch ( Exception ex )
{
}
return Content ( "success" ) ;
ในหมู่พวกเขา WXChatHandler อาจเป็นคลาสการประมวลผลเฉพาะที่สืบทอดการใช้งาน WXChatHandler และส่งกลับผลลัพธ์ที่สอดคล้องกันโดยการเขียนเหตุการณ์ผู้ใช้ที่เกี่ยวข้องใหม่
3. การเรียกใช้ฟังก์ชันขั้นสูง (ภายใต้โฟลเดอร์ Platform)
อินเทอร์เฟซการทำงานขั้นสูงอื่นๆ ของบัญชีอย่างเป็นทางการของ WeChat จำเป็นต้องมีอินเทอร์เฟซการเข้าถึงโทเค็นทั่วโลก เช่น ข้อมูลโมดูลพุช ฯลฯ การรับโทเค็นการเข้าถึงโดยอัตโนมัติถูกห่อหุ้มไว้ในการประมวลผลคำขอพื้นฐานของ SDK ตามค่าเริ่มต้น จะถูกบันทึกไว้ในระบบ แคชและจะได้รับการอัปเดตโดยอัตโนมัติเมื่อหมดอายุ หากจำเป็นต้องบันทึก ใน Redis ก็สามารถฉีดผ่านโมดูลแคชใน oscommon ได้ เพียงเพิ่มการใช้งานโมดูลแคชสำหรับ sns (ตัวอย่างจะได้รับในภายหลัง) appid สอดคล้องกัน ดังนั้นจึงไม่จำเป็นต้องกังวลเกี่ยวกับข้อขัดแย้งระหว่างบัญชีทางการหลายบัญชี
ก. ประกาศข้อมูลการกำหนดค่า:
//声明配置信息
private static AppConfig m_Config = new AppConfig ( )
{
AppSource = "11" ,
AppId = "你的appId" ,
AppSecret = "你的secretkey"
} ;
ข. ประกาศตัวอย่าง:
private static readonly WXPlatMassApi m_OffcialApi = new WXPlatMassApi ( m_Config ) ;
ค. การใช้งานเฉพาะ
m_OffcialApi . SendTemplateAsync ( "openid" , "templateId" , "url" , new { } )
ในปัจจุบัน ส่วนตรรกะของส่วนนี้ของเฟรมเวิร์กอินเทอร์เฟซได้รับการประมวลผลแล้ว ฟังก์ชันหลักของบัญชีอย่างเป็นทางการได้เสร็จสมบูรณ์แล้ว อินเทอร์เฟซของร้านค้าและอุปกรณ์จะยังคงได้รับการปรับปรุงให้สมบูรณ์แบบในเร็วๆ นี้ คุณสามารถนำไปใช้เองหรือมีส่วนร่วมก็ได้ เพิ่มอินเทอร์เฟซใหม่ ต้องใช้โค้ดเพียงไม่กี่บรรทัด โปรดดูรายละเอียดที่การมีส่วนร่วมของโค้ด
เมื่อพิจารณาถึงสถานการณ์การใช้งานจริงของธุรกิจ อินเทอร์เฟซบัญชีอย่างเป็นทางการของ WeChat ได้ถูกแยกออกอย่างง่ายดาย และ AccessToken และ SDK อื่นๆ เป็น SDK อิสระ SDK อิสระทั้งหมดอ้างอิงถึงไลบรารีคลาส OSS.Clients.Platform.WX.Base และจัดเตรียมการกำหนดค่าแบบรวมของ WXPlatConfigProvider ภายใต้ไลบรารีประเภทนี้ โดยหลักๆ แล้วเพื่ออำนวยความสะดวกให้ผู้ใช้สามารถบรรลุการเข้าซื้อกิจการ AccessToken แบบรวมศูนย์ เมื่อใช้ SDK อื่นๆ เช่น: โปรเจ็กต์การจัดการแคชแบบรวม AccessToken ที่นำไปใช้งานโดยใช้ OSS.Clients.Platform.WX.AccessToken ใช้วิธีการรับ AccessToken การกำหนดค่าภายใต้ WXPlatConfigProvider ในโปรเจ็กต์โดยใช้ OSS.Clients.Platform.WX.Basic
ปัจจุบันโปรเจ็กต์นี้มุ่งเน้นไปที่การประมวลผล WeChat SDK เป็นหลัก เฟรมเวิร์กหลักของ WeChat เสร็จสมบูรณ์แล้ว และจำเป็นต้องเสริมอินเทอร์เฟซให้เสร็จสมบูรณ์ มันจะง่ายมากที่จะสร้างอินเทอร์เฟซให้สมบูรณ์โดยยึดตามข้อมูลพื้นฐานของผู้ใช้ ตัวอย่าง มันถูกแบ่งออกเป็นสองขั้นตอนส่วนต่อไปนี้:
1. ประกาศเอนทิตีวัตถุ
// 获取用户基本信息请求实体
public class WXPlatUserInfoReq
{
public string openid { get ; set ; }
public string lang { get ; set ; }
}
// 响应实体,继承WXBaseResp
public class WXPlatUserInfoResp : WXBaseResp
{
public string openid { get ; set ; }
public string nickname { get ; set ; }
//... 字段省略
public List < int > tagid_list { get ; set ; }
}
ฉันเขียนหน้า js เพื่อสร้างที่อยู่ Gist ของเอนทิตีอย่างรวดเร็วผ่านคำอธิบายฟิลด์เอกสาร WeChat ที่อยู่ภาษาจีนแบบโอเพ่นซอร์ส
2.การใช้งานฟังก์ชั่น
public WXPlatUserInfoResp GetUserInfo ( WXPlatUserInfoReq userReq )
{
var req = new OssHttpRequest ( ) ;
req . HttpMethod = HttpMethod . Get ;
req . AddressUrl = string . Concat ( m_ApiUrl ,
$ "/cgi-bin/user/info?openid= { userReq . openid } &lang= { userReq . lang } " ) ;
// 请求地址中的AccessToken 底层会自动补充
return RestCommonOffcial < WXPlatUserInfoResp > ( req ) ;
}
3. เพิ่มการทดสอบหน่วย (ไม่บังคับ)
[ TestMethod ]
public void GetUserInfoTest ( )
{
var res = m_Api . GetUserInfo ( new WXPlatUserInfoReq ( )
{ openid = "o7gE1s6mygEKgopVWp7BBtEAqT-w" } ) ;
Assert . IsTrue ( res . IsSuccess ( ) ) ;
}
ส่วนที่เหลือสามารถส่งผ่านคอมไพล์
尽快完善
โปรเจ็กต์ปัจจุบันอาศัยโปรเจ็กต์โอเพ่นซอร์สที่ฉันเขียนไว้ก่อนหน้านี้ OSS.Common (เอนทิตีข้อผิดพลาดทั่วโลกและการแทรกโมดูล) และ OSS.Http (คำขอ http) พวกมันค่อนข้างเรียบง่ายและกะทัดรัดโดยมีคลาสเพียงไม่กี่คลาสเท่านั้น ไม่ต้องกังวลเรื่องท้องอืด