
到這里,小(xiao)程序端的工作就完成了(le),但(dan)是事情還沒有結束,因為API也該咱實現(苦笑.JPG)。那我們接著來看看在API端有哪些需要處(chu)理(li)的活:
首先我(wo)們(men)要新建發送模板的(de)PostSendTemplete 模型
public class PostSendTemplete
{
public string openId { get; set; }
public string touser { get; set; }
public string template_id { get; set; }
public string page { get; set; }
public string form_id { get; set; }
public object data { get; set; }
public string color { get; set; }
public string emphasis_keyword { get; set; }
}
|
和一個(ge)返回的TemplateResultModel 模型
public class TemplateResultModel
{
public int errcode { get; set; }
public string errmsg { get; set; }
public string template_id { get; set; }
}
|
第一(yi)步,我們新建一(yi)個(ge)SendTemplateMessage 的業務 接口如下:
Task<TemplateResultModel> SendTemplateMessage(PostSendTemplete tmModel);
第二步,實現這個業(ye)務接口:
public async Task<TemplateResultModel> SendTemplateMessage(PostSendTemplete tmModel)
{
WxaTempleteModel model = tmModel.TranslateToSendTemplateDto();
var result = await _template.SendTemplateMessage(model, tmModel.openId);
return result;
}
|
第(di)三(san)步(bu),上述(shu)標(biao)紅的是新建的一個數據接(jie)(jie)口,接(jie)(jie)口如(ru)下:
Task<TemplateResultModel> SendTemplateMessage(WxaTempleteModel tmModel,string code);
第四(si)步,實現上述的數據接口:
public async Task<TemplateResultModel> SendTemplateMessage(WxaTempleteModel tmModel,string openid)
{
tmModel.touser = openid;
var url = _config[ConfigurationKeys.TEMPLATE_SEND_RUL];
var accesstoken = MinTokenContext.AccessToken;//注:此處用到的appId和密匙都是小程序的
string queryUrl = string.Format(url, accesstoken);
var objectdata = JsonConvert.SerializeObject(tmModel);
var data = Httphelper.SendPostHttpRequest(queryUrl, contentType, objectdata.ToString());
TemplateResultModel userCard = JsonConvert.DeserializeObject<TemplateResultModel>(data);
if (userCard.errcode == Invalid_token)
{
MinTokenContext.RefreshAccessToken();
_logger.LogInformation(string.Format(@"模板消息: Access Token 刷新,時間 {0}", DateTime.Now.ToString("yy-MM-dd HH:mm")));
data = Httphelper.SendPostHttpRequest(queryUrl, contentType, objectdata);
userCard = JsonConvert.DeserializeObject<TemplateResultModel>(data);
}
return userCard;
}
|
上述方法實現中,都需要(yao)將接口和實現在初始化的(de)時候(hou)綁定,然后(hou)注(zhu)入:
//Startup中
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
//Configure中:
services.AddScoped<ITemplateMessage, TemplateMessage>();
|
需要(yao)引入:
using Microsoft.Extensions.Configuration;
