主要实现功能:关注公众号的用户发送拼多多商品连接,后台程序经过连接查找商品优惠券或返佣状况。
说明:使用了niltor 封装的拼多多接口 github地址 ,可是须要注意可能会存在返回模型没法正确解析,致使没有正确返回数据的问题。使用的过程当中修改下返回模型属性类型就行了。html
最终实现效果以下:git
代码实现:github
public async System.Threading.Tasks.Task<string> GetPddCouponAsync(ExmlMsg xmlMsg) { //经过正则表达式解析拼多多商品连接,获取拼多多商品Id string msg = xmlMsg.Content; Match m_goods = Regex.Match(msg, @"(?<=goods_id=)([0-9]*)"); string goods_id = m_goods.Value; if (string.IsNullOrEmpty(goods_id)) { LogHelper.WriteLog(typeof(WechatController), "获取拼多多goods id失败" + msg); return ""; } //调用以前须要先注册PddOpenSdk服务 /* PddCommonApi.ClientId = "d8172a66ddf14220beac58e8eddca0d9"; PddCommonApi.ClientSecret = "d5993ce16cc0d1bd35403176f35544962e786645"; PddCommonApi.RedirectUri = "RedirectUri"; */ DdkApi api = new DdkApi(); var model = new DetailDdkGoodsRequestModel() { Type = "pdd.ddk.goods.detail", GoodsIdList = $"[{goods_id}]" }; DetailDdkGoodsResponseModel result = null; try { result = await api.DetailDdkGoodsAsync(model); } catch(Exception ex) { LogHelper.WriteLog(typeof(WechatController), "调用拼多多获取商品详细信息失败" + ex.Message); return ""; } var goods = result.GoodsDetailResponse.GoodsDetails.FirstOrDefault(); if (goods==null) //无优惠券 无佣金 { return "/:rose 亲,这款商品的优惠返利活动结束了~\n请换个商品试试吧。\n========================\n\ue231 <a href='https://mobile.yangkeduo.com/duo_cms_mall.html?pid=2495191_31302208cpsSign=CM2495191_31302208_3a1c1a0431608b9c1eb417183d57c1bdduoduo_type=2'>拼多多优惠券商城</a>\n下单确认收货后就能收到返利佣金啦~"; } else if(goods.HasCoupon) //有优惠券 有佣金 { try { var promotionUrlModel = await api.GenerateDdkGoodsPromotionUrlAsync(new GenerateDdkGoodsPromotionUrlRequestModel { Type = "pdd.ddk.goods.promotion.url.generate", PId = pdd_pid, GoodsIdList = $"[{goods_id}]", GenerateShortUrl = true, CustomParameters = xmlMsg.FromUserName }); return $"/:rose 亲,商品信息以下~\n========================\n{goods.GoodsName}\n【在售价】{((decimal)goods.MinGroupPrice) / 100}元\n【券后价】{Math.Round(((decimal)(goods.MinGroupPrice - goods.CouponDiscount.Value)) / 100, 2)}元\n\ue231 <a href='{promotionUrlModel.GoodsPromotionUrlGenerateResponse.GoodsPromotionUrlList.FirstOrDefault().Url}'>点击这里下单</a>\n下单确认收货后就能收到返利佣金啦~"; } catch (Exception ex) { LogHelper.WriteLog(typeof(WechatController), "调用拼多多获取推广连接失败" + ex.Message); return ""; } } else //无优惠券 但有佣金 { try { var promotionUrlModel = await api.GenerateDdkGoodsPromotionUrlAsync(new GenerateDdkGoodsPromotionUrlRequestModel { Type = "pdd.ddk.goods.promotion.url.generate", GoodsIdList = $"[{goods_id}]", PId = pdd_pid, GenerateShortUrl = true, CustomParameters = xmlMsg.FromUserName }); return $"/:rose 亲,商品信息以下~\n========================\n{goods.GoodsName}\n【在售价】{((decimal)goods.MinGroupPrice) / 100}元\n【约返利】{Math.Round((decimal)(goods.MinGroupPrice * goods.PromotionRate) / 100000,2)}元\n\ue231 <a href='{promotionUrlModel.GoodsPromotionUrlGenerateResponse.GoodsPromotionUrlList.FirstOrDefault().Url}'>点击这里下单</a>\n下单确认收货后就能收到返利佣金啦~\n\n 点击查看 <a href='http://mp.weixin.qq.com/s?__biz=Mzg2NTAxOTEyMA==&mid=100000146&idx=1&sn=62405c8df3db46e74940aefb9ac3737b&chksm=4e61340d7916bd1bf645afbc6d10c1f19561d7fa59847516c01e64c0791e6d544f4f56c4f498#rd'>如何领取返利</a>"; }catch(Exception ex) { LogHelper.WriteLog(typeof(WechatController), "调用拼多多获取推广连接失败" + ex.Message); return ""; } } }
详细请查看 http://blog.yshizi.cn/44.html正则表达式
软件构成:一个主进程exe和一个注入的dll
主进程exe:把dll注入到微信,发送指令给dll,接受dll的信息
注入的dll:被注入到微信内部,拦截微信的数据,调用微信的功能
接收主进程的指令,执行指令对应的操做、发信息给主进程api
exe和dll通信:
exe
接收消息
建立一个可见的主界面
设置接受消息的回调函数
微信
发送信息
LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam)
dll
接收消息
建立一个不可见的界面
设置接受消息的回调函数
async
发送信息
LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam)函数