django经度纬度计算两点距离实例及微信商家付款给用户接口实例

python

根据经度纬度计算两点距离

from math import radians,cos,sin,asin,sqrt

#根据经纬度计算两点距离
def haversine(lon1,lat1,lon2,lat2):
    """
    Calculate the great circle distance between two points
    on the earth (specified in decimal degrees)
    """
    # 将十进制度数转化为弧度
    lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])

    # haversine公式
    dlon = lon2 - lon1
    dlat = lat2 - lat1
    a = sin(dlat / 2) ** 2 + cos(lat1) * cos(lat2) * sin(dlon / 2) ** 2
    c = 2 * asin(sqrt(a))
    r = 6371  # 地球平均半径,单位为公里
    return c * r * 1000

小数点保留位数

def get_two_float(f_str, n):
    f_str = str(f_str)      # f_str = '{}'.format(f_str) 也可以转换为字符串
    a, b, c = f_str.partition('.')
    c = (c+"0"*n)[:n]       # 如论传入的函数有几位小数,在字符串后面都添加n为小数0
    return ".".join([a, c])

base加时间戳加密

import re
import time
import base64
import random


# base64加密
def code_encryption(imei):
    time_now = str(time.strftime('%Y.%m.%d %H:%M:%S', time.localtime(time.time())))
    timei = time_now.split('.')
    imei1 = imei[0:8]
    imei2 = imei[8:]
    num = random.randint(0, 100000)
    name = imei1 + str(num) + timei[0] + imei2
    name = name.encode('utf-8')
    a = base64.b64encode(name)
    return a


# base64解密
def code_decryption(str):


    if re.match(r"[0-9]*$", str):
        return str
    b = base64.b64decode(str)
    c = b.decode('utf-8')
    i1 = c[0:8]
    i2 = c[-8:]
    _imei = i1 + i2
    return _imei

十六进制数字转十进制字符串

import binascii
binascii.b2a_hex(data).decode() 

微信获取用户openid

获取appid

import requests
# 获取用户openid
class OpenidUtils(object):
    url = "https://api.weixin.qq.com/sns/jscode2session"
    appid = "123456asdasd32132"   # 乱写的
    secret = "a81ef814642313fc22132465c3e02" # 同上

        # self.jscode = jscode  # 前端传回的动态jscode

    def get_openid(self,jscode):
        # url一定要拼接,不可用传参方式
        url = self.url + "?appid=" + self.appid + "&secret=" + self.secret + "&js_code=" + jscode + "&grant_type=authorization_code"
        r = requests.get(url)
        openid = r.json()['openid']
        return openid

云通讯发送短信接口

import random
from http import client
import urllib.parse
import json

import requests

url = 'http://smssh1.253.com/msg/send/'
un = '123121231'
pw = 123123123'
# 发送测试
TEST = False


def send_sms(phone, msg):
    """
    能用接口发短信
    """
    phone_number = phone
    code = str(random.randint(100000, 999999))
    if not TEST:
        # msg = '【模板头】验证码 %s,如非本人操作,请检查您的 软件账号。' % code+
        try:
            msg = msg % code
        except Exception as e:
            msg = msg
        rd = 1
        data = {
            'un': un,
            'pw': pw,
            'phone': phone_number,
            'msg': msg,
            'rd': rd
        }
        res = requests.get(url, params=data)

    return code

django 微信小程序提现到零钱接口

微信支付开发文档

from __future__ import unicode_literals

import uuid

from django.conf import settings
from random import Random
import hashlib
import requests
import re


def get_client_ip(request):
    """
    获取请求IP
    :param request:
    :return:
    """
    ip = ''
    try:
        x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
        if x_forwarded_for:
            ip = x_forwarded_for.split(',')[0]
        else:
            ip = request.META.get('REMOTE_ADDR')
    except:
        pass
    return ip


def format_url(params, api_key=None):
    """
    字典序排序
    :param params:
    :param api_key:
    :return:
    """
    url = "&".join(['%s=%s' % (key, params[key]) for key in sorted(params)])
    if api_key:
        url = '%s&key=%s' % (url, api_key)
    return url


def calculate_sign(params, api_key):
    """
    计算签名
    :param params:
    :param api_key:
    :return:
    """
    # 签名步骤一:按字典序排序参数, 在string后加入KEY
    url = format_url(params, api_key)
    # 签名步骤二:MD5加密, 所有字符转为大写
    return hashlib.md5(url.encode('utf-8')).hexdigest().upper()


def random_str():
    """
    生成32位随机字符串
    :return:
    """
    uuids = str(uuid.uuid1()).split('-')
    uuidss = ''.join(uuids)
    return uuidss


def dict_to_xml(params):
    xml = ["<xml>", ]
    for k, v in params.items():
        xml.append('<%s>%s</%s>' % (k, v, k))
    xml.append('</xml>')
    return ''.join(xml)


def dict_to_xml2(params):
    xml = ["<xml>", ]
    for k, v in params.items():
        xml.append('<%s><![CDATA[%s]]></%s>' % (k, v, k))
    xml.append('</xml>')
    return ''.join(xml)


def xml_to_dict(xml):
    xml = xml.strip()
    if xml[:5].upper() != "<XML>" and xml[-6:].upper() != "</XML>":
        return None, None

    result = {}
    sign = None
    content = ''.join(xml[5:-6].strip().split('\n'))

    pattern = re.compile(r"<(?P<key>.+)>(?P<value>.+)</(?P=key)>")
    m = pattern.match(content)
    while m:
        key = m.group("key").strip()
        value = m.group("value").strip()
        if value != "<![CDATA[]]>":
            pattern_inner = re.compile(r"<!\[CDATA\[(?P<inner_val>.+)\]\]>")
            inner_m = pattern_inner.match(value)
            if inner_m:
                value = inner_m.group("inner_val").strip()
            if key == "sign":
                sign = value
            else:
                result[key] = value

        next_index = m.end("value") + len(key) + 3
        if next_index >= len(content):
            break
        content = content[next_index:]
        m = pattern.match(content)

    return sign, result


class WeiXinPay(object):
    def __init__(self, mch_appid, mchid, api_key):
        self.api_key = api_key
        self.url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers"
        self.params = {
            "mch_appid": mch_appid,
            "mchid": mchid
        }

    def update_params(self, kwargs):
        self.params["desc"] = "小程序提现"   # 备注
        self.params["check_name"] = "NO_CHECK"
        self.params.update(kwargs)

    def post_xml(self):
        sign = calculate_sign(self.params, self.api_key)
        self.params["sign"] = sign
        xml = dict_to_xml(self.params)
        # 要特别注意的是需要带证书(微信支付签发的)
        response = requests.post(self.url, data=xml.encode('utf-8'),
                                 cert=(settings.WXPAY_CLIENT_CERT_PATH, settings.WXPAY_CLIENT_KEY_PATH))
        return xml_to_dict(response.text)

    def post_xml2(self):
        sign = calculate_sign(self.params, self.api_key)
        self.params["sign"] = sign
        xml = dict_to_xml2(self.params)
        # 要特别注意的是需要带证书(微信支付签发的)
        response = requests.post(self.url, data=xml.encode('utf-8'),
                                 cert=(settings.WXPAY_CLIENT_CERT_PATH, settings.WXPAY_CLIENT_KEY_PATH))
        return xml_to_dict(response.text)


class Pay(WeiXinPay):
    def __init__(self, mch_appid, mchid, api_key):
        super(Pay, self).__init__(mch_appid, mchid, api_key)

    def post(self, openid, trade_no, amount, ip, name, nonce_str):
        kwargs = {
            "openid": openid,
            "partner_trade_no": trade_no,
            "amount": amount,
            "spbill_create_ip": ip,
            "re_user_name": name,
            "nonce_str": nonce_str
        }
        self.update_params(kwargs)
        return self.post_xml()[1]


class PayQuery(WeiXinPay):
    """
    查询企业付款
    """

    def __init__(self, mch_appid, mchid, api_key):
        super(PayQuery, self).__init__(mch_appid, mchid, api_key)
        self.url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/gettransferinfo"

    def post(self, trade_no, nonce_str):
        kwargs = {
            "partner_trade_no": trade_no,
            "nonce_str": nonce_str
        }
        self.update_params(kwargs)
        return self.post_xml2()[1]


def order_uuid():
    # 订单号32位随机字符串
    uuids = str(uuid.uuid1()).split('-')
    uuidss = ''.join(uuids)
    return uuidss


def wechat_pay(openid, amount, ip, name, nonce_str):
    openid = openid
    trade_no = order_uuid()
    amount = amount # '企业付款金额,单位为分'
    ip = ip
    name = name  # '收款用户姓名'
    nonce_str = nonce_str #'随机字符串'
    pay = Pay(settings.WXPAY_APPID, settings.WXPAY_MCHID, settings.WXPAY_APIKEY)
    response = pay.post(openid, trade_no, int(float(amount) * 100), ip, name, nonce_str)
    return response
    
settins.py
WXPAY_APPID = '123213123'  # appid
WXPAY_MCHID = '123123123'  # 商户号
WXPAY_APIKEY = '12312312412321'  # api密钥

WXPAY_CLIENT_CERT_PATH = os.path.join(BASE_DIR, 'apiclient_cert.pem') 
WXPAY_CLIENT_KEY_PATH = os.path.join(BASE_DIR, 'apiclient_key.pem')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值