12、ABPZero系列教程之拼多多卖家工具 拼团提醒功能登录拼多多实现
上篇文章已经完成了整个拼多多拼团提醒功能,本篇继续完成拼多多帐号登录,拼多多帐号登录的目的是为了获取拼团商品的SKU和订单号,便于商家备货。
以下是拼多多官方的后台登录,要实现的功能并不是直接在这里登录,而是在项目通过发送数据包的方式去登录,主要就是拿到登录后的cookie或token。
注:做此功能需要准备拼多多卖家帐号,如果没有,可以跳过本篇内容。

PddTool项目
添加CodeResponse.cs文件,代码如下:
文件路径:D:\abp version\aspnet-zero-3.4.0\aspnet-zero-3.4.0\src\PddTool\PddApi\Response\CodeResponse.cs
public class CodeResponse
{
/// <summary>
///
/// </summary>
public bool result { get; set; }
/// <summary>
///
/// </summary>
public Data data { get; set; }
}
public class Data
{
/// <summary>
///
/// </summary>
public string token { get; set; }
/// <summary>
///
/// </summary>
public string image { get; set; }
}
添加UserResponse.cs文件,代码如下:
文件路径:D:\abp version\aspnet-zero-3.4.0\aspnet-zero-3.4.0\src\PddTool\PddApi\Response\UserResponse.cs
/// <summary>
/// 登录返回
/// </summary>
public class UserResponse
{
/// <summary>
///
/// </summary>
public bool authResult { get; set; }
/// <summary>
///
/// </summary>
public UserInfo userInfo { get; set; }
/// <summary>
///
/// </summary>
public string inMobileWhiteList { get; set; }
/// <summary>
///
/// </summary>
public string mobileVerification { get; set; }
}
public class UserInfo
{
/// <summary>
/// 用户id
/// </summary>
public int id { get; set; }
/// <summary>
/// 用户名
/// </summary>
public string username { get; set; }
/// <summary>
/// 店铺id
/// </summary>
public int mallId { get; set; }
/// <summary>
///
/// </summary>
public int passwordStatus { get; set; }
/// <summary>
/// 手机
/// </summary>
public string mobile { get; set; }
/// <summary>
/// 昵称
/// </summary>
public string nickname { get; set; }
/// <summary>
/// 角色id列表
/// </summary>
public List<int> roleIdList { get; set; }
/// <summary>
/// 店铺管理员
/// </summary>
public bool mallOwner { get; set; }
/// <summary>
///
/// </summary>
public List<string> roleNameList { get; set; }
/// <summary>
///
/// </summary>
public List<string> permissionList { get; set; } /// <summary>
/// 登录cookie
/// </summary>
public string Cookie { get; set; }
}
添加RequestErrorResponse.cs文件,代码如下:
文件路径:D:\abp version\aspnet-zero-3.4.0\aspnet-zero-3.4.0\src\PddTool\PddApi\Response\RequestErrorResponse.cs
/// <summary>
/// 请求错误返回
/// </summary>
public class RequestErrorResponse
{
/// <summary>
///
/// </summary>
public string error_msg { get; set; }
/// <summary>
///
/// </summary>
public int error_code { get; set; }
}
添加LoginRequest.cs文件,代码如下:
文件路径:D:\abp version\aspnet-zero-3.4.0\aspnet-zero-3.4.0\src\PddTool\PddApi\Request\LoginRequest.cs
/// <summary>
/// 拼多多登录
/// </summary>
public class LoginRequest
{
/// <summary>
/// 用户名
/// </summary>
public string Username { get; set; } /// <summary>
/// 密码
/// </summary>
public string Password { get; set; } /// <summary>
/// 验证码
/// </summary>
public string Code { get; set; } /// <summary>
/// 令牌
/// </summary>
public string Token { get; set; }
}
修改MallTool.cs文件,末尾添加如下代码:
文件路径:D:\abp version\aspnet-zero-3.4.0\aspnet-zero-3.4.0\src\PddTool\MallTool.cs
/// <summary>
/// 取验证码
/// </summary>
/// <returns></returns>
public static CodeResponse GetCode()
{
string url = string.Format("http://mms.pinduoduo.com/captchaCode/getCaptchaCode?rd=" + Guid.NewGuid());
var client = new RestClient(url);
var request = new RestRequest(Method.GET);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("referer", "http://mms.pinduoduo.com/Pdd.html");
IRestResponse response = client.Execute(request);
var code = JsonConvert.DeserializeObject<CodeResponse>(response.Content);
return code;
} /// <summary>
/// 拼多多登录
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public static UserResponse Login(LoginRequest data)
{
string url = "http://mms.pinduoduo.com/auth";
var client = new RestClient(url);
var request = new RestRequest(Method.POST);
request.AddParameter("username", data.Username);
request.AddParameter("password", data.Password);
request.AddParameter("authCode", data.Code);
request.AddParameter("verificationCode", "");
request.AddParameter("token", data.Token);
request.AddHeader("cache-control", "no-cache");
IRestResponse response = client.Execute(request);
if (response.Content.Contains("error_code"))
{
var error = JsonConvert.DeserializeObject<RequestErrorResponse>(response.Content);
throw new UserFriendlyException(error.error_msg);
}
var c = response.Cookies.Single(a => a.Name.Equals("PASS_ID"));
var cookie = c.Value;
var user = JsonConvert.DeserializeObject<UserResponse>(response.Content);
user.userInfo.Cookie = cookie;
return user;
}
到这里就把拼多多后台登录封装好了,就2个方法,一个获取验证码、一个提交post数据登录。
Application项目
修改IMallAppService.cs文件,添加2个方法,代码如下:
文件路径:D:\abp version\aspnet-zero-3.4.0\aspnet-zero-3.4.0\src\MyCompanyName.AbpZeroTemplate.Application\Pdd\MallApp\IMallAppService.cs
/// <summary>
/// 取验证码
/// </summary>
/// <returns></returns>
CodeOutput GetCode(); /// <summary>
/// 登录
/// </summary>
/// <returns></returns>
UserInfoOutput Login(LoginInput input);
添加CodeOutput.cs文件,代码如下:
文件路径:D:\abp version\aspnet-zero-3.4.0\aspnet-zero-3.4.0\src\MyCompanyName.AbpZeroTemplate.Application\Pdd\MallApp\Dto\CodeOutput.cs
public class CodeOutput
{
/// <summary>
/// 图片
/// </summary>
public string Image { get; set; } /// <summary>
/// 令牌
/// </summary>
public string Token { get; set; }
}
添加UserInfoOutput.cs文件,代码如下:
文件路径:D:\abp version\aspnet-zero-3.4.0\aspnet-zero-3.4.0\src\MyCompanyName.AbpZeroTemplate.Application\Pdd\MallApp\Dto\UserInfoOutput.cs
public class UserInfoOutput
{
/// <summary>
/// 用户名
/// </summary>
public string Username { get; set; } /// <summary>
/// 店铺id
/// </summary>
public int MallId { get; set; } /// <summary>
///
/// </summary>
public string Cookie { get; set; }
}
添加LoginInput.cs文件,代码如下:
文件路径:D:\abp version\aspnet-zero-3.4.0\aspnet-zero-3.4.0\src\MyCompanyName.AbpZeroTemplate.Application\Pdd\MallApp\Dto\LoginInput.cs
public class LoginInput
{
/// <summary>
/// 用户名
/// </summary>
public string Username { get; set; } /// <summary>
/// 密码
/// </summary>
public string Password { get; set; } /// <summary>
/// 验证码
/// </summary>
public string Code { get; set; } /// <summary>
/// 令牌
/// </summary>
public string Token { get; set; }
}
修改MallAppService.cs文件,实现接口添加的2个方法,代码如下:
文件路径:D:\abp version\aspnet-zero-3.4.0\aspnet-zero-3.4.0\src\MyCompanyName.AbpZeroTemplate.Application\Pdd\MallApp\MallAppService.cs
/// <summary>
/// 获取验证码
/// </summary>
/// <returns></returns>
public CodeOutput GetCode()
{
var code = MallTool.GetCode();
if (code.result == false)
{
throw new UserFriendlyException("验证码获取失败!");
}
return new CodeOutput()
{
Image = code.data.image,
Token = code.data.token
};
} /// <summary>
/// 登录
/// </summary>
/// <returns></returns>
public UserInfoOutput Login(LoginInput input)
{
var data = Mapper.Map<LoginRequest>(input);
try
{
var key = string.Format("{0}_{1}_Mall", AbpSession.UserId, input.Username);
var cache = _cacheManager.GetCache<string, UserResponse>(key);
if (cache != null)
{
cache.Clear();
}
var user = _cacheManager.GetCache<string, UserResponse>(key).Get("Login." + input.Username, () => MallTool.Login(data));
//登录成功清除对应店铺开团商品的缓存
key = string.Format("{0}_{1}_KaiTuan", AbpSession.UserId, user.userInfo.mallId);
_cacheManager.GetCache<string, List<KaiTuan>>(key).Clear(); return new UserInfoOutput()
{
Cookie = user.userInfo.Cookie,
MallId = user.userInfo.mallId,
Username = input.Username
};
}
catch (Exception ex)
{
throw new UserFriendlyException("登录失败:" + ex.Message);
} }
打开CustomDtoMapper.cs文件,添加如下映射:
文件路径:D:\abp version\aspnet-zero-3.4.0\aspnet-zero-3.4.0\src\MyCompanyName.AbpZeroTemplate.Application\CustomDtoMapper.cs
mapper.CreateMap<LoginInput, LoginRequest>();
生成解决方案,浏览器打开http://localhost:8088/swagger/ui/index,测试刚刚添加的2个api。
接下来页面实现。
打开KaiTuanController.cs文件,添加如下代码:
文件路径:D:\abp version\aspnet-zero-3.4.0\aspnet-zero-3.4.0\src\MyCompanyName.AbpZeroTemplate.Web\Areas\Mpa\Controllers\Pdd\KaiTuanController.cs
public ActionResult LoginModal()
{
var code = _mallAppService.GetCode();
ViewBag.code = code;
return PartialView("_LoginModal");
}
添加对应的视图文件_LoginModal.cshtml,代码如下:
文件路径:D:\abp version\aspnet-zero-3.4.0\aspnet-zero-3.4.0\src\MyCompanyName.AbpZeroTemplate.Web\Areas\Mpa\Views\KaiTuan\_LoginModal.cshtml
@using MyCompanyName.AbpZeroTemplate.Pdd.MallApp.Dto
@using MyCompanyName.AbpZeroTemplate.Web.Areas.Mpa.Models.Common.Modals
@{
var code = ViewBag.code as CodeOutput;
}
@Html.Partial("~/Areas/Mpa/Views/Common/Modals/_ModalHeader.cshtml", new ModalHeaderViewModel("登录拼多多"))
<div class="modal-body">
<form name="LoginForm" class="form-horizontal margin-bottom-40" role="form">
<input id="token" type="hidden" name="token" value="@code.Token" />
<div class="form-group form-md-line-input">
<div class="col-md-6">
<div class="input-icon">
<input type="text" class="form-control" name="username" placeholder="帐号名/手机号">
<div class="form-control-focus">
</div>
<i class="fa fa-user"></i>
</div>
</div>
</div>
<div class="form-group form-md-line-input">
<div class="col-md-6">
<div class="input-icon right">
<input type="password" class="form-control" name="password" placeholder="密码">
<div class="form-control-focus">
</div>
<i class="fa fa-key"></i>
</div>
<div class="help-block">
with right aligned icon
</div>
</div>
</div>
<div class="form-group form-md-line-input">
<div class="col-md-6">
<div class="input-group">
<input type="text" class="form-control" name="code" placeholder="">
<div class="form-control-focus">
</div>
<div class="input-group-addon">
<img id="img" src="@code.Image" style="width: 113px; height: 30px;" />
</div>
</div>
</div>
</div>
<div class="form-group">
<div class="col-md-offset-4 col-md-10">
<button type="button" class="btn green save-button">登录</button>
</div>
</div>
</form>
</div>
@Html.Partial("~/Areas/Mpa/Views/Common/Modals/_ModalFooterWithCancel.cshtml")
添加视图对应的JS文件,代码如下:
文件路径:D:\abp version\aspnet-zero-3.4.0\aspnet-zero-3.4.0\src\MyCompanyName.AbpZeroTemplate.Web\Areas\Mpa\Views\KaiTuan\_LoginModal.js
var _mallService = abp.services.app.mall;
(function ($) {
app.modals.LoginModal = function () { var _$loginForm = null; var _modalManager;
this.init = function (modalManager) {
_modalManager = modalManager;
//取出Form表单
_$loginForm = _modalManager.getModal().find('form[name=LoginForm]');
}; this.save = function () {
//验证不通过返回
if (!_$loginForm.valid()) {
return;
}
//序列化参数
var login = _$loginForm.serializeFormToObject();
_modalManager.setBusy(true);
_mallService.login(
login
).done(function (data) {
_modalManager.close();
abp.event.trigger('app.loginModalSaved', { username: data.username });
}).always(function () {
_modalManager.setBusy(false);
});
};
};
function getCode() {
_mallService.getCode().done(function (data) {
$("#img").attr("src", data.image);
$("#token").val(data.token);
});
} //getCode(); $("#img").click(function () {
getCode();
});
})(jQuery);
打开文件Index.js,添加如下代码:
文件路径:D:\abp version\aspnet-zero-3.4.0\aspnet-zero-3.4.0\src\MyCompanyName.AbpZeroTemplate.Web\Areas\Mpa\Views\KaiTuan\Index.js
6行位置添加一个变量:
var username;//记录登录拼多多用户名
26行位置添加如下代码:
/**
登录模态框
*/
var _loginModal = new app.ModalManager({
viewUrl: abp.appPath + 'Mpa/KaiTuan/LoginModal',
scriptUrl: abp.appPath + 'Areas/Mpa/Views/KaiTuan/_LoginModal.js',
modalClass: 'LoginModal'
});
178行位置添加如下代码:
//登录拼多多
$("#LoginPddButton").click(function () {
_loginModal.open();
}); abp.event.on('app.loginModalSaved', function (data) {
console.info("成功", data);
username = data.username;
toastr["success"]("登录拼多多成功", "提示");
});
生成解决方案,浏览器登录后台测试。


12、ABPZero系列教程之拼多多卖家工具 拼团提醒功能登录拼多多实现的更多相关文章
- 1、ABPZero系列教程之拼多多卖家工具 前言
此系列文章围绕着拼多多卖家工具来介绍ABPZero的使用,内容包括手机登录.手机注册.拼团提醒.微信公众号绑定帐号.有拼团发送消息到微信公众号(只要关注过微信公众号并已绑定系统帐号). 学习此系列必备 ...
- 9、ABPZero系列教程之拼多多卖家工具 拼团提醒类库封装
本篇开始正式做功能,我在开发拼团提醒之前,拼多多并没有放出拼团人数不足就提醒卖家的功能. 有这个想法主要来源于朋友的抱怨,我想这应该是大部分卖家的心声吧. 经过分析,拿到了几个api,不要问我api怎 ...
- 10、ABPZero系列教程之拼多多卖家工具 拼团提醒逻辑功能实现
上篇文章已经封装好了类库,现在继续实现功能,在ABPZero框架的基础上来实现一个完整的功能. Redis缓存 编写功能前先在本机安装好Redis,需要用到Redis做缓存,以下分享2个Windows ...
- 11、ABPZero系列教程之拼多多卖家工具 拼团提醒功能页面实现
上一篇讲解了拼团提醒逻辑功能实现,现在继续实现页面功能. Core项目 打开AbpZeroTemplate-zh-CN.xml语言文件,在末尾添加如下代码: 文件路径:D:\abp version\a ...
- 2、ABPZero系列教程之拼多多卖家工具 更改数据库为Mysql
因为要部署项目到云服务器,不想在服务器上装SqlServer,所以需要把项目改为Mysql. 项目初始化 1.下载项目压缩包,前面文章已经说到,可以加群到群文件里下载.解压缩下载的项目源码,使用VS2 ...
- 4、ABPZero系列教程之拼多多卖家工具 集成短信发送模块
ABPZero并没有手机短信发送功能,现在我们来集成一个,为后面注册.登录作铺垫. 阿里云短信服务 首先需要在阿里云开通短信服务,连接地址 开通后,在签名管理中添加一个签名 在模板管理中添加一个模板, ...
- 7、ABPZero系列教程之拼多多卖家工具 修改注册功能
本篇开始进入重头戏,之前的几篇文章都是为了现在的功能作准备.前面教程已经讲到修改User表结构,接下来就需要修改注册逻辑代码. 注册页面 修改Register.cshtml,备注如下代码: 文件路径: ...
- 13、ABPZero系列教程之拼多多卖家工具 微信公众号开发前的准备
因为是开发阶段,我需要在本地调试,而微信开发需要配置域名,这样natapp.cn就有了用武之地,应该说natapp就是为此而生的. natapp.cn是什么 这是一个内网映射的网站,支持微信公众号.小 ...
- 3、ABPZero系列教程之拼多多卖家工具 项目修改及优化
本篇内容杂而简单,不需要多租户.不需要多语言.使用MPA(多页面).页面加载速度提升…… 刚登录系统会看到如下界面,这不是最终想要的效果,以下就一一来修改. 不需要多租户 AbpZeroTemplat ...
随机推荐
- Maven版本号中隐藏的惊天大秘密
一.背景 现在主流的Java系的互联网公司里,绝大多数公司都使用Maven作为依赖管理工具,一般我们对于依赖的版本号,常见两种类型:一种以“-RELEASE”结尾,另一种以“-SNAPSHOT”结尾. ...
- IDEA使用--字体、编码和基本设置
IDEA这么高端的工具之前只是断断续续使用了一下,因为项目的开发都是在eclipse上,每次学习IDEA的使用都得上网搜索半天,今天自己整理一下,方便以后查阅. IDEA版本15.0.4 字体 界面字 ...
- 将java项目打包成docker镜像
简介:将jar打包成镜像好说,毕竟jar包长的都是一样的,但是我们只是写了一个普通的java项目,我也不方便封装成jar包什么的,但是我们也想打包docker image怎么办呢,我们可以用编译后的j ...
- php-自动生成sql语句
前两天学习到的知识,挺有用的,因此这里做个分享 function AutoCreateSql($tab,$dataarr,$mode='insert',$where=' 1 and 1 limit 1 ...
- HTML5 矩阵变换
transforms 使用图形上下文对象的transforms方法修改变换矩阵,该方法的定义如下: context.transform(m11,m12,m21,m22,dx,dy); 其中m11,m1 ...
- vue过滤数字为2位小数点,过滤器
过滤数字为2位小数点 filters: { //保留2位小数点过滤器 不四舍五入 number(value) { var toFixedNum = Number(value).toFixed(3); ...
- 使用Word进行文档修订版本的比较
项目经理在实际的工作过程中,比如要写文档方案,就需要对文档的修订版本进行管理和控制.在以前的工作中,笔者使用的是UltraEdit这个软件工具中的Ultra Compare这个子工具来进行的文档版本的 ...
- 前端学习_02_vps、web服务器、域名申请
vps申请 国内比较好用的服务器:阿里云,青云:在国内申请ip比较方便,但是必须要备案域名,否则马上就会被封禁掉. 话说我也有点自己的思路想做个网站,服务器还真的是个问题. 小型的网站只需要ECS服务 ...
- ASP.NET MVC框架开发系列教程
本系列教程是自己在工作中使用到而记录的,如有错误之处,请给与指正 文章目录 MVC4 开篇 第一章 初识MVC4 第二章 下山遇虎(@helper) 第三章 Models模块属性详解 第四章 在MVC ...
- 第九章 BootstrapTable的使用
一.简介 BootstrapTable是一个Bootstrap 3 的表格插件,支持单选, 复选框, 排序, 分页等功能 官网:http://bootstrap-table.wenzhixin.net ...