三方平台应用

三方平台应用

一、验证码

1、图片验证码

  • 概述
    图片验证码是验证码的一种,图片验证码常见的形式有输入图片中字母、数字等

  • 作用
    图片验证码是嵌入在企业网站、APP等应用中使用的一种验证方式,用户需要识别图片并按要求执行操作,在验证成功后才能使用某项功能。比如客户在某应用中发布文章或评论时,必须先完成图片验证,才可以进行发布操作 。一般用于最多为注册功能

  • 模块安装
    pip install pillow

  • 实现
    def verifycode(request):
    # 引入绘图模块
    from PIL import Image, ImageDraw, ImageFont
    # 引入随机函数模块
    import random
    # 定义变量,用于画面的背景色、宽、高
    bgcolor = (random.randrange(20, 100), random.randrange(
    20, 100), random.randrange(20, 100))
    width = 100
    height = 50
    # 创建画面对象
    im = Image.new('RGB', (width, height), bgcolor)
    # 创建画笔对象
    draw = ImageDraw.Draw(im)
    # 调用画笔的point()函数绘制噪点
    for i in range(0, 100):
    xy = (random.randrange(0, width), random.randrange(0, height))
    fill = (random.randrange(0, 255), 255, random.randrange(0, 255))
    draw.point(xy, fill=fill)
    # 定义验证码的备选值
    str = '1234567890QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm'
    # 随机选取4个值作为验证码
    rand_str = ''
    for i in range(0, 4):
    rand_str += str[random.randrange(0, len(str))]
    # 构造字体对象
    font = ImageFont.truetype(r'/home/xlg/PycharmProjects/fonts/ADOBEARABIC-BOLDITALIC.OTF', 40)
    # 构造字体颜色
    fontcolor1 = (255, random.randrange(0, 255), random.randrange(0, 255))
    fontcolor2 = (255, random.randrange(0, 255), random.randrange(0, 255))
    fontcolor3 = (255, random.randrange(0, 255), random.randrange(0, 255))
    fontcolor4 = (255, random.randrange(0, 255), random.randrange(0, 255))
    # 绘制4个字
    draw.text((5, 2), rand_str[0], font=font, fill=fontcolor1)
    draw.text((25, 2), rand_str[1], font=font, fill=fontcolor2)
    draw.text((50, 2), rand_str[2], font=font, fill=fontcolor3)
    draw.text((75, 2), rand_str[3], font=font, fill=fontcolor4)
    # 释放画笔
    del draw
    # 存入session,用于做进一步验证
    request.session['verify'] = rand_str
    # 内存文件操作
    import io
    buf = io.BytesIO()
    # 将图片保存在内存中,文件类型为png
    im.save(buf, 'png')
    # 将内存中的图片数据返回给客户端,MIME类型为图片png
    return HttpResponse(buf.getvalue(), 'image/png')
    验证码使用
    path(r'^getcode/$',main.verifycode,name='verifycode'),

    <img src="/getcode/" onclick="this.src='/getcode/?id='+Math.random()">
    

2、邮箱验证码

  • 配置settings
    settings.py
    EMAIL_HOST = os.environ.get('MAIL_SERVER','smtp.163.com')
    EMAIL_HOST_USER = os.environ.get('MAIL_USER','15611833906@163.com')
    EMAIL_HOST_PASSWORD = os.environ.get('MAIL_PASSWORD',123456)

  • 单人邮件
    from django.core.mail import send_mail

    send_mail(
        'Subject here',
        'Here is the message.',
        'from@example.com',
        ['to@example.com'],
        fail_silently=False,
    )
    

二、阿里云海量云存储

1、配置步骤

2、使用

  • 安装
    通过pip安装
    执行命令如下:
    pip install oss2

  • 验证
    验证SDK版本

    • 在命令行输入python并回车,进入Python环境。
    • 执行以下命令检查SDK版本

      import oss2
      oss2.version

  • yourAccessKeyId与yourAccessKeySecret获取
    常用入口->选择AccessKey

    选择开始使用子用户AccessKey

    进入创建用户页面

    输入Bucket名称(你在Bucket创建时候的名称)

    点击确定

    输入验证码

    点击左侧导航用户->添加权限

    输入oss->进行添加->确定->完成

    点击创建新的AccessKey

  • 查看Bucket名称
    https://oss.console.aliyun.com/bucket

  • 查看Bucket所在地域对应的Endpoint

  • 上传本地文件
    SDK位置:新手入门->SDK参考->选择Python->简单上传->上传本地文件https://help.aliyun.com/document_detail/88426.htm?spm=a2c4g.11186623.0.0.2d562cb7UCrYzI#concept-88426-zh
    import oss2
    import os
    # 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
    auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret')
    # yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
    # 填写Bucket名称。
    bucket = oss2.Bucket(auth, 'yourEndpoint', 'examplebucket')

    # 必须以二进制的方式打开文件。
    # 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。
    with open('D:\\localpath\\examplefile.txt', 'rb') as fileobj:
        # Seek方法用于指定从第1000个字节位置开始读写。上传时会从您指定的第1000个字节位置开始上传,直到文件结束。
        fileobj.seek(1000, os.SEEK_SET)
        # Tell方法用于返回当前位置。
        current = fileobj.tell()
        # 填写Object完整路径。Object完整路径中不能包含Bucket名称。
        bucket.put_object('exampleobject.txt', fileobj)  
    

    这种上传方式需要将本地文件上传到服务器,然后再将文件上传到云存储(不建议使用这种方式)

  • 实例
    upload.html




    Title



    {%csrf_token%}

    {# #}




    views.py
    from django.shortcuts import render,HttpResponse
    import os

    # 完成了简单的上传
    def upload(req):
        import random
        if req.method == 'POST':
            f = req.FILES.get('file')
            import oss2
            import os
            # 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
            auth = oss2.Auth('LTAI5tKvzubUZFUf5E9XvHQP', '1wqHRFJETCQ0w374Hi5Q8w8p0pqVUz')
            # yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
            # 填写Bucket名称。
            bucket = oss2.Bucket(auth, 'oss-cn-beijing.aliyuncs.com', 'luckyxlg')
    
            # 必须以二进制的方式打开文件。
            # 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。
            # with open('D:\\localpath\\examplefile.txt', 'rb') as fileobj:
                # Seek方法用于指定从第1000个字节位置开始读写。上传时会从您指定的第1000个字节位置开始上传,直到文件结束。
                # fileobj.seek(1000, os.SEEK_SET)
                # Tell方法用于返回当前位置。
                # current = fileobj.tell()
                # 填写Object完整路径。Object完整路径中不能包含Bucket名称。
            key = f.name
            print(bucket.put_object(key, f))
            # 设置签名url
            url = bucket.sign_url('GET', key, 10 * 60)
            print(url)
            return HttpResponse("上传文件处理完成!")
        return render(req,'upload.html')
    

    获取文件上传公有的url
    https://help.aliyun.com/document_detail/39607.htm?spm=a2c4g.11186623.0.0.564d1e772DpkBP
    如果bucket设置为私有 如需访问 则必须设置签名url

  • 下载
    def download(req):
    import oss2

        # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
        auth = oss2.Auth('LTAI5tKvzubUZFUf5E9XvHQP', '1wqHRFJETCQ0w374Hi5Q8w8p0pqVUz')
        # Endpoint以杭州为例,其它Region请按实际情况填写。
        bucket = oss2.Bucket(auth, 'oss-cn-beijing.aliyuncs.com', 'luckyxlg')
    
        # 下载OSS文件到本地文件。如果指定的本地文件存在会覆盖,不存在则新建。
        #  <yourLocalFile>由本地文件路径加文件名包括后缀组成,例如/users/local/myfile.txt。
        #  <yourObjectName>表示下载的OSS文件的完整名称,即包含文件后缀在内的完整路径,例如abc/efg/123.jpg。
        bucket.get_object_to_file('屏幕快照 2019-08-12 下午8.33.08.png', '/home/xlg/桌面/a.png')
        return HttpResponse('下载')
    

    完整文档
    https://github.com/aliyun/aliyun-oss-python-sdk/blob/master/examples/object_basic.py?spm=a2c4g.11186623.0.0.368e24cbyAEjhE&file=object_basic.py

三、支付

1、配置步骤

  • 打开百度->输入支付宝开放平台->选择

  • 点击登录->扫码登录

  • 进入管理中心

  • 选择开发者中心

  • 选择创建应用->网页&移动应用->支付接入

  • 输入应用名称->图标->选择网页应用->确认创建

  • 选择添加能力

  • 新增能力->支付

  • 能力列表进行勾选

  • 开发信息->接口加密方式->设置

  • 点击底部蓝色字->下载支付宝秘钥生成器->下载成功并安装

  • 安装完成打开->按图配置->点击生成秘钥->复制公钥

  • 回到浏览器进行粘贴->保存设置->点击x关闭

  • 开发信息->授权回调地址->设置(设置一个支付成功的回调地址)

  • 回到顶部->提交审核

  • 等待审核->预计在1天内完成审核

2、沙箱操作

说明:因为个人没有资质使用支付功能 所以可以在沙箱环境进行测试使用

  • 回到首页->开发服务->研发服务

  • 沙箱应用->RSA2(SHA256)密钥(推荐)->输入支付宝秘钥生成器生成的应用公钥->保存设置

  • 下载钱包(仅限Android)

  • 沙箱账号(所提供的账号为测试使用账号)

3、SDK

  • 访问github.com->搜索Alipay

  • 选择fzlee/alipay

  • 点击选择中文文档

4、使用

  • 安装
    pip install python-alipay-sdk --upgrade

  • 初始化
    from alipay import AliPay
    def pay(req):
    alipay = AliPay(
    appid="",
    app_notify_url=None, # 默认回调url
    app_private_key_string=app_private_key_string,
    # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
    alipay_public_key_string=alipay_public_key_string,
    sign_type="RSA2" # RSA 或者 RSA2
    debug=False # 默认False
    )

    # 如果你是 Python 3的用户,使用默认的字符串即可
    subject = "测试订单"
    
    # 电脑网站支付,需要跳转到https://openapi.alipay.com/gateway.do? + order_string
    order_string = alipay.api_alipay_trade_page_pay(
        out_trade_no="20161112",  # 订单ID
        total_amount=0.01,  # 金额
        subject=subject,  
        return_url="https://example.com",   # 回调URL
        notify_url="https://example.com/notify" # 可选, 不填则使用默认notify url
    )
    return redirect('https://openapi.alipaydev.com/gateway.do?' + order_string)
    

    注意:
    重定向的地址
    沙箱环境:https://openapi.alipaydev.com/gateway.do?
    正式环境:https://openapi.alipay.com/gateway.do?
    在工具生成公钥私钥的时候 需要注意添加如下内容
    公钥
    -----BEGIN PUBLIC KEY-----
    。。。
    -----END PUBLIC KEY-----
    私钥
    -----BEGIN RSA PRIVATE KEY-----
    。。。
    -----END RSA PRIVATE KEY-----
    RSA改为RSA2

posted @ 2022-03-01 10:18  寻月隐君  阅读(217)  评论(0编辑  收藏  举报