闲着无聊,给大家介绍一下,互联网黑产其中之一的私人支付公司如何月入几千万,希望大家别远离黑产,避免入坑,在日常生活中收款时候,请确保付款方的资金来路,不要随意将银行卡及收款二维码提供给他人,避免资金无故遭受到司法冻结,本文将介绍以下几点。 什么是第三方支付?我相信很多同学可能不了解,这里引用百度百科的介绍: 目前正规的第三方持牌机构,全国大概280几家公司,牌照由最初的几百万一本,到今天的几亿一本,其中最受三方支付公司喜欢的当然是阿里巴巴的支付宝和腾讯的财付通(微信支付),以下案例我将主要以支付宝为例,先给大家看一张支付流程图: 以上产品在支付行业内统称为“原生通道”,请大家记住这个词,这些产品在有一定技术手段的四方公司手中就可以包装成“聚合支付”,就像一个二维码(或者点击支付后跳转到h5的选择页面),扫了之后,提供支付宝支付、微信支付、银行卡支付等,废话不多说,下面给大家看一张图,如下: 原生通道就不在啰嗦了,大家看相关支付持牌公司的官网介绍吧,这里说一下非原生通道,分为2种,如下: 看完上面介绍,相信大家对支付通道应该有了一定的了解,接下来揭秘一下这些公司是怎么运作(希望大家别去从事非法行业),多数公司会选择先搭建一套四方系统(行业术语),功能类似数据交易展示、支付通道的控制开关、商户对接(用户的增删改查)、通道接口等,然后用自己的四方系统对接自己的三方通道系统,这样做的好处是避免了三方通道系统直接暴露给商户(防止黑客入侵,造成金钱损失),也将商户和码商(二维码供应商)在系统完全隔离了,码商将二维码上传到所谓的三方平台供四方平台调用。 目前主流的仍然是支付宝和微信,毕竟用户用,所谓个码就是在支付宝和微信里面的个人收款码和商家收款码,这些收款码由二维码供应商收集,或者由平台在qq群、贴吧、网络平台上包装成网赚项目,给予一定的费率提成(一手价格 2.3% – 2.5%),个码的费率提成是所有支付产品里面最低的一种,原因是商户(菠菜公司)也注重用户体验,不好的用户体验,会造成支付成功率低。 由于个人能提供的收款二维码数量较少,为了提高收益,降低人头费(提供身份供应的人,统称人头)。码商会选择注册公司营业执照,用公司营业执照来注册支付宝帐户(企业支付宝),一本营业执照可以申请11个企业支付宝(甚至更多,听说最高303个码)。 为了改善用户体验和避免支付宝的相册风控,四方公司利用技术手段将二维码包装成h5,步骤是唤醒支付宝,跳转到付款页面,其中一些接口如下: 个码具体就不详细介绍了。。 相信大家在电商平台app购物的时候,会看到有的app上面会有找朋友代付、帮我付等功能按钮,代付二维码就是利用了这一功能,在配合淘宝刷单平台,就可以产生出大量的代付二维码,然后将这些二维码上传到平台,供黑产公司使用。 其原理为码商(还是码商。。。)在有代付功能的app上注册帐户,开设店铺,预先上传与黑产公司商议好的商品价格(行话称为固码),生产二维码,黑产公司将代付二维码提供给客户付款,码商最终从正规平台提现到个人帐户。 Django是python中做web系统开发的一个重量级的框架,关于Django的前世今生及原理我就不介绍了,大家自行去百度吧,正式开始实现一个Django的个码支付通道。 首先打开电脑的终端(win系统cmd),执行以下代码,就可以成功安装Django框架,有虚拟环境的同学,请用创建虚拟环境,别问为什么,因为这样做很好。 安装好环境之后,开始创建一个项目吧,代码如下: 代码成功执行后,就Django就会创建一个目录,Django的目录结构如下: 执行python manage.py startapp命令后,会生成一个目录,结构如下: 废话不多说,直接开始干吧,先创建一个apps的目录,方便管理我们的app,将我们创建的app目录,移动到apps目录中,然后进入settings.py文件,修改配置,如下: 关于model的详细介绍,各位自行百度吧,这里只简单介绍一下: 字段的常用的参数介绍: class Meta的介绍: 以上的字段中,交易费率是该用户最终所能得到的利润,通常按一万块rmb来计算,百分之二就等于每交易一万挣200块,接下来创建一个关联用户的二维码表,如下: 先介绍一下上面字段为什么这样做,看下面吧: 最小金额和最大金额的设定是防止支付宝方面的风控,提高二维码的成活率,也防止一些黑心商户通过二维码洗黑钱(特别特别黑的钱。。)。 收款限额的设定也是防止支付宝方面的风控,收款到设置金额,就将二维码下线,停止收款。 而排序、成功率、冷却时间是通过相关算法,来提高整个通道的支付成功率,剔除一些被风控的二维码。 启用状态,则是由码商决定是否将二维码上线收款或者下线。 其他字段仅仅是为了展示相关数据。 完成了以上的部分,接下来要进入重点的部分了,关于订单的model和订单接口的加解密, 订单model代码如下: 以上字段的刚刚创建好的订单的状态都属于“等待支付”,部分字段介绍 商户订单号 :创建订单的时候,商户要将自己系统所创建的交易订单号post过来,防止出现掉单后扯皮。 交易手续费:是该笔订单金额所产生的利润,该利润分配给码商,平台收取的是商户与码商的中间差价。 回调地址:商户用于接收订单状态的接口,用户支付成功之后,平台将支付结果通过回调地址通知商户。 平台订单编号:平台自身创建的一个订单编号。 有了这个订单model,那接下来就可以创建一个对应的视图函数,来接收商户的订单了,在创建视图函数之前,先说一下加解密,正规的支付宝支付采用的都是rsa+aes的加密的支付方式,包装数据的安全性和可靠性,关于rsa和aes,大家自行百度吧,做黑产的第四方公司大多数采用的是md5加密(为啥不用rsa+aes,因为这些公司的技术员水平够烂,让他们对接rsa和aes,简直会要他们命,这个是我猜的),关于md5加密,每个平台都有自己的排序方式(多数采用ascii码排序),回归正题,来看一下md5加密的伪代码: 以这个数据为例,进行排序,如下: 参数之间用&的拼接,排序后的数据,如下: 最终用md5加密,md5加密代码如下: 加密完成后,会得到数据加密后的哈希值,放入待请求的数据中(sign=哈希值),平台接收到参数后,根据所提供的参数和排序方法比对商户post过的哈希值是否和平台生成一致,如果一致,则说明验证通过,返回一个二维码给商户,不一致则验证失败,提示相关错误,Django的订单视图代码如下: 以上代码实现了验证数据可靠性,相关数据的创建的修改,并返回一个二维码,最后配置一下路由地址,就可以开放接口了。以上都是伪代码,主要想说的是python还是很牛逼的,哈哈。码字辛苦,帮忙关注一下公众号,谢谢啦。
揭秘月入上千万的互联网黑产(支付通道)的运作模式及python Django框架支付平台实战原理
支付通道的原理及介绍
`“第三方支付是指具备一定实力和信誉保障的独立机构,通过与银联或网联对接而促成交易双方进行交易的网络支付模式。 在第三方支付模式,买方选购商品后,使用第三方平台提供的账户进行货款支付(支付给第三方),并由第三方通知卖家货款到账、要求发货;买方收到货物,检验货物,并且进行确认后,再通知第三方付款;第三方再将款项转至卖家账户。”
看到上图中,客户在商户客户端点击支付按钮后,调用支付接口,成功支付后,将消息分别推送给商户服务端和客户,上图中的商户是属于正规商户,可以向支付宝(微信)申请相关的支付产品,以支付宝为例,产品如下:
这张图跟之前的图,中间多了一个平台,这个平台就是今天的重点,一个月入几千万的平台,而在黑产当中,上图中的商户变成了网络博彩公司(行业术语“菠菜公司”),p站,资金盘等,由于正规持牌公司对非法的支付的打击,四方公司为了生存,利用技术手段寻找漏洞,包装一些非正规通道。通道大体分为2种,如下:
支付通道的运作及衍生行业
个码(个人二维码)
由于这些公司营业执照没有对公帐户,正常都无法通过支付宝的风险认证,于是有产生了一个新的行业“跳码(跳过对公帐户验证)”,一本营业执照跳11个码的费用在1500-2000,其中的原理将IP地址改变成法人支付宝常用地址或者利用其他一些手段干扰支付宝的风控认证。alipays://platformapi/startapp?appId=20000123&actionType=scan&biz_data={"s": "money","u": "商户id","a": "金额","m":"备注"}
alipays://platformapi/startapp?appId=09999988&actionType=toAccount&goBack=NO&amount=金额&userId=商户id&memo=备注
代付二维码
Django框架的支付通道实现
Django框架的安装及使用
pip install django
django-admin startproject myproject(项目名称)
其中settings文件为Django配置文件,urls文件为路由地址配置文件,wsgi文件为Django web协议的入口文件,manage文件不具体介绍了,下面说以下manage常用的命令:python manage.py runserver (默认运行服务在http://127.0.0.1:8000) python manage.py runserver 192.168.1.101:8888(运行服务在指定的IP地址和端口) python manage.py makemigrations (生成数据库迁移文件) python manage.py migrate (执行迁移命令) python manage.py createsuperuser (创建后台登陆帐户密码) python manage.py collectstatic (收集静态文件到指定目录) python manage.py startapp appname(创建一个app文件,appname自定义)
简单说一下一下migrations文件夹,admin.py,models.py,views.py等文件用处,其他的自行百度吧,如下
实现Django 个码支付系统(简单)
导入sys库,将apps目录加入环境变量中,如红框所示。然后将我们创建的app加入Django的INSTALLED_APPS中,如下:
上图中,Django默认使用的管理后台为Django自己的admin后台,这个后台太丑了,给大家看看,如下:
所以要换一个好看一点的后台管理页面,上图中的字都是英文的,肯定不是我们想要的,配置一下settings,改变一下时区和字体吧,如下:
关于admin管理后台,推荐使用simpleui,直接使用pip install simpleui安装就好,然后修改配置文件,如下:
重新运行一下服务,就可以出现新的界面了,如下:
好了,接下来正式开始编写代码吧(以下都是伪代码,别当真,主要是讲支付行业的一个原理),创建我们的第一个model吧,,首先是用户相关的model的,毕竟你得有码商来干活吧,代码如下:class User(AbstractUser,BaseModel): mercode = models.CharField(max_length=50,default='', null=False, verbose_name='商户号', blank=True) merkey = models.CharField(max_length=50,null=True,verbose_name='用户密钥',blank=True) p_rate = models.PositiveIntegerField(default=10, null=False, verbose_name='交易费率', blank=True) user_money = models.DecimalField(max_digits=10, default=0, decimal_places=2, null=True, verbose_name='帐户余额',blank=True) pay_money = models.DecimalField(max_digits=10, default=0, decimal_places=2, null=True, verbose_name='充值总额',blank=True) get_money = models.DecimalField(max_digits=10, default=0, decimal_places=2, null=True, verbose_name='返佣总额',blank=True) beizhu = models.CharField(default='', max_length=50,null=True,blank=True, verbose_name='备注') parent = models.ForeignKey('self',null=True,default='',blank=True,verbose_name='上级代理',on_delete=models.CASCADE) class Meta: db_table = 'userinfo' verbose_name = '用户信息' verbose_name_plural = verbose_name def __str__(self): # 被外键关联时候,显示返回的字段 return self.username
class qrCode(BaseModel): qr_type = ( (1, '微信'), (2, '支付宝'), ) qrname = models.CharField(max_length=11,default=' ', null=True, verbose_name='二维码名称', blank=True) image = models.ImageField(upload_to='static/', null=False, verbose_name='二维码图片', blank=True) order_status = models.SmallIntegerField(choices=qr_type, default=1,null=False, blank=True, verbose_name='挂码类型') all_count = models.PositiveIntegerField(default=0, null=False, verbose_name='付款总次数', blank=True) suc_count = models.PositiveIntegerField(default=0, null=True, verbose_name='成功次数',blank=True) fail_count = models.PositiveIntegerField( default=0, null=True, verbose_name='失败次数',blank=True) day_money = models.IntegerField(default=0, null=True, verbose_name='当日收款', blank=True) all_money = models.IntegerField(default=0, null=True, verbose_name='总收款', blank=True) lim_money = models.IntegerField(default=0, null=True, verbose_name='收款限额', blank=True) min_money = models.IntegerField(default=300, null=True, verbose_name='最小金额', blank=True) max_money = models.IntegerField(default=5000, null=True, verbose_name='最大金额', blank=True) suc_rate = models.CharField(max_length=24,default='0', null=True, verbose_name='成功率', blank=True) paixu = models.SmallIntegerField(default=1, null=True, verbose_name='排序', blank=True) pay_time = models.PositiveIntegerField(default=1,null=True,verbose_name='轮训时间(秒)') cool_time = models.PositiveIntegerField(default=1, null=True, verbose_name='冷却时间') use_button = models.BooleanField(default=False, verbose_name='启用状态') parent = models.ForeignKey(UserP, null=False, blank=True, verbose_name='所属用户', on_delete=models.CASCADE) class Meta: db_table = 'qrCode' verbose_name = '二维码管理' verbose_name_plural = verbose_name def __str__(self): return self.qrname
class OrderInfo(BaseModel): ORDER_status = ( (1, '支付成功'), (2, '支付失败'), (3, '等待支付'), ) ORDER_status_dic = { 1: '支付成功', 2: '支付失败', 3: '等待支付', } order_id = models.CharField(max_length=100,unique=True, verbose_name='平台订单编号') order_status = models.SmallIntegerField(choices=ORDER_status, default=1, verbose_name='订单状态') product_price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='支付金额') pay_price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='手续费') trance_num = models.CharField(max_length=100, default='', verbose_name='商户订单号') notifyurl = models.URLField( default='', verbose_name='回调地址') order_info = models.ForeignKey(qrCode, default='', verbose_name='二维码', on_delete=models.CASCADE) user_id = models.ForeignKey(UserP, default='', verbose_name='商户', on_delete=models.CASCADE) class Meta: db_table = 'order_info' verbose_name = '订单信息' verbose_name_plural = verbose_name def __str__(self): return self.order_id
:
# 排序和拼接数据 def getdate(self,date,key): self.parme = '' for i in date: data1 = i + "=" + date[i] + "&" self.parme += data1 self.parme = self.parme.rstrip("&") self.parme += key return self.parme
"pay_memberid": "191075927", #商户号 "pay_orderid": '191075927191075927191075927',#商户订单号 'pay_applydate':'2019-09-16 14:58:55', #订单时间 'pay_bankcode':'903', # 支付通道类型 "pay_notifyurl": "https://www.baidu.com", #回调地址 "pay_amount": "10", #订单金额
pay_amount=10&pay_applydate=2019-09-16 14:58:55&pay_bankcode=903&pay_memberid=191075927&pay_notifyurl=http://www.baidu.com&pay_orderid=191075927191075927191075927&key=q7igsgql3nior3fgp2a51ixxme4hmso7
def md5hash(self, parme): md5 = hashlib.md5() md5.update(parme.encode("utf-8")) return md5.hexdigest()
class GET_ORDER(View): def get(self,request): return HttpResponse('hello world') def post(self,request): # 平台商户号 user_mercode = request.POST.get('pay_memberid') # 支付通道类型 pay_bankcode = request.POST.get('pay_bankcode') # 商户订单编号 pay_orderid = request.POST.get('pay_orderid') # 订单金额 pay_amount = request.POST.get('pay_amount') # 订单时间 pay_applydate = request.POST.get('pay_applydate') # 下游通知地址 pay_notifyurl = request.POST.get('pay_notifyurl','') # 订单的哈希值 sign = request.POST.get('sign') # 判断商户号是否正确 try: # 商户号 user = User.objects.get(mercode=user_mercode) except: return JsonResponse({'errmsg':'your membercode is error.'}) # 判断数据加密是否正确 merkey = user.merkey order_date = {'pay_memberid': user_mercode, 'pay_orderid': pay_orderid, 'pay_amount': pay_amount, 'pay_bankcode': pay_bankcode, 'notifyurl': pay_notifyurl, 'pay_applydate': pay_applydate, } sign2 = self.getdate(order_date,merkey) if sign != sign2: return JsonResponse({'errmsg':'验证失败。'}) # 选择一个码返回, try: qr = self.get_qr(user,pay_cro) except: return JsonResponse({'errmsg': u'库存不足.'}) # 创建订单编号 order_id = date.today().strftime('%Y%m%d%s') # 创建保存点 save_point = transaction.savepoint() # 计算相关费率 transit_price = int(pay_amount) * (user.p_rate / 10000 ) # 创建平台订单 OrderInfo.objects.create( order_id=order_id, order_status=3, product_price=pay_amount, transit_price=transit_price, trance_num=pay_orderid, notifyurl=pay_notifyurl, pay_method=pay_cro.paymentt, order_info=qr, user_id=user, ) # 更新二维码相关数据 qr.cool_time = int(time.time()) +qr.pay_time qr.save() # 保存数据 transaction.savepoint_commit(save_point) # 返回一个携带二维码的收银台页面 content = { “模版参数” } return render(request,'alipay.htm',content)
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算