看以前回復不少說明你們頗有熱情&文章被誤刪掉了,不想讓有的朋友錯失這個高逼格的東西,如今從新發布,此次就直接放出源碼,文章最末下載地址。html
看以前回復不少說明你們頗有熱情&文章被誤刪掉了,不想讓有的朋友錯失這個高逼格的東西,如今從新發布,此次就直接放出源碼,文章最末下載地址。json
看以前回復不少說明你們頗有熱情&文章被誤刪掉了,不想讓有的朋友錯失這個高逼格的東西,如今從新發布,此次就直接放出源碼,文章最末下載地址。api
1、咱們的目標ide
分離基礎參數和業務參數。測試
具備高重用和擴展性。微信支付
輕量級。ui
2、實現目標this
(一)分離基礎參數和業務參數
仔細分析全部接口,抽離出每一個模塊接口的公共參數。
A、針對微信公衆號全部接口分析(不包括微信支付)
a、獲取基礎Access_Token使用的是AppId和AppSecret。
b、網頁受權相對獨立,但也會使用到AppId和AppSecret。
c、其餘接口,皆是經過基礎Access_Token來獲取數據的。
根據a、b、c得出公共或者說SDK保留參數即爲SDK的基礎參數有AppId、AppSecret、基礎Access_Token。
B、微信支付接口分析
分析所得,都有appid、mch_id、nonce_str、sign_type、sign參數,即爲SDK基礎參數。
針對退款還有兩個特殊參數,證書路徑以及證書密碼。
根據A、B所得,咱們抽離出了基礎參數,基礎參數不能和業務參數只能經過初始化或者調用單獨方法複製,業務參數用於調固定方法一次性傳入。
(二)具備高重用和擴展性
普通接口有兩種調用方法GET和POST,針對GET就是參數就在地址上,地址上的參數既包括基礎參數也包含了業務參數;POST的狀況業務參數是json格式;出參都是json。
支付接口入參和出參都是xml。
設計之處就得考慮到上面不一樣場景,每一個接口對象可設置本身請求方式(GET或者POST);每一個接口可設置本身格式化方式(json或者xml)。
針對退款還可設置是否須要證書以及設置證書路徑和證書密碼等公共方法。
(三)輕量級
不引用第三方組件。
下面是測試樣例:
a、刪除菜單
public static void Test() { Vop.Api.Request.VopMobilePublicMenuDeleteRequest request = new Vop.Api.Request.VopMobilePublicMenuDeleteRequest(); Vop.Api.IVopClient client = new Vop.Api.DefaultVopClient(Config.AppId, Config.AppSecret); string accessToken = Vop.Api.Util.AccessTokenContainer.GetAccessToken(Config.AppId, Config.AppSecret); var result = client.Execute(request, accessToken); }
b、建立菜單
public static void Test() { string menuStr = "{\"button\":[{\"name\":\"醫療業務\",\"sub_button\":[{\"type\":\"view\",\"name\":\"主頁\",\"url\":\"http://m.baidu.com\"}]}]}"; Vop.Api.Request.VopMobilePublicMenuCreateRequest request = new Vop.Api.Request.VopMobilePublicMenuCreateRequest(); request.SetBizModel(menuStr); Vop.Api.IVopClient client = new Vop.Api.DefaultVopClient(Config.AppId, Config.AppSecret); string accessToken = Vop.Api.Util.AccessTokenContainer.GetAccessToken(Config.AppId, Config.AppSecret); var result = client.Execute(request, accessToken); }
c、發送消息
public static void Test() { Vop.Api.Request.VopMobilePublicMessageCustomSendRequest request =
new Vop.Api.Request.VopMobilePublicMessageCustomSendRequest(); request.SetBizModel("{\"touser\":\"osDGfuNaaSJ1LbScpzpeRXF107L4\",\"msgtype\":\"text\",\"text\":{\"content\":\"你好\"}}"); Vop.Api.IVopClient client = new Vop.Api.DefaultVopClient(Config.AppId, Config.AppSecret); string accessToken = Vop.Api.Util.AccessTokenContainer.GetAccessToken(Config.AppId, Config.AppSecret); var result = client.Execute(request, accessToken); }
d、獲取用戶信息
public static void Test() { Vop.Api.Request.VopMobilePublicUserInfoRequest request = new Vop.Api.Request.VopMobilePublicUserInfoRequest(); request.SetBizModel("openid=osDGfuNaaSJ1LbScpzpeRXF107L4&lang=zh_CN"); Vop.Api.IVopClient client = new Vop.Api.DefaultVopClient(Config.AppId, Config.AppSecret); string accessToken = Vop.Api.Util.AccessTokenContainer.GetAccessToken(Config.AppId, Config.AppSecret); var result = client.Execute(request, accessToken); }
e、支付接口
public static void Test() { Vop.Api.IVopClient client = new Vop.Api.DefaultVopClient(Config.AppId, Config.AppSecret, "utf-8", Config.MchId, Config.MchSecret); Vop.Api.Request.VopTradeWapPayRequest request = new Vop.Api.Request.VopTradeWapPayRequest(); request.SetBizModel(string.Format("<body>{0}</body><out_trade_no>{1}</out_trade_no><total_fee>{2}</total_fee><spbill_create_ip>{3}</spbill_create_ip><notify_url>{4}</notify_url><trade_type>{5}</trade_type><openid>{6}</openid>", "test", CreateOrderNo(), 1, "8.8.8.8", "http://m.baidu.com", "JSAPI", "oskHZwpNB6K4eaGkL3m7bPdAZQ0Y")); var r1 = client.PayExecute(request); } private static string CreateOrderNo() { return string.Format("{0}{1:D4}", DateTime.Now.ToString("yyyyMMddHHmmss"), Math.Abs(BitConverter.ToInt32(Guid.NewGuid().ToByteArray(), 0))); }
是否是很簡單啊,若是我要新增一個接口怎麼弄呢,So Easy.
好比新增一個發送模板消息的接口,你只需建立兩個類便可完成:
接口請求對象: VopMobilePublicMessageTemplateSendRequest.cs
接口返回實體: VopMobilePublicMessageTemplateSendResponse.cs
VopMobilePublicMessageTemplateSendRequest.cs
namespace Vop.Api.Request { public class VopMobilePublicMessageTemplateSendRequest : VopPublicRequest<VopMobilePublicMessageTemplateSendResponse>, IVopRequest<VopMobilePublicMessageTemplateSendResponse> { public override string GetApiUrl() { this.apiUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={0}"; return string.Format(this.apiUrl, GetAccessToken()); } public override string GetApiMethod() { this.apiMethod = "POST"; return this.apiMethod; } } }
VopMobilePublicMessageTemplateSendResponse.cs
[DataContract] public class VopMobilePublicMessageTemplateSendResponse : VopPublicResponse { }
好了,新增的發送模板消息就算完成了,下面是該接口的測試
public static void Test() { Vop.Api.Request.VopMobilePublicMessageTemplateSendRequest request = new Vop.Api.Request.VopMobilePublicMessageTemplateSendRequest(); request.SetBizModel(Config.GetTestData("VopMobilePublicMessageTemplateSendTest")); Vop.Api.IVopClient client = new Vop.Api.DefaultVopClient(Config.AppId, Config.AppSecret); string accessToken = Vop.Api.Util.AccessTokenContainer.GetAccessToken(Config.AppId, Config.AppSecret); var result = client.Execute(request, accessToken); }
項目截圖
原文地址:http://www.cnblogs.com/deeround/articles/6815069.html
源碼地址:點我點我 記得推薦