django之微信支付JSAPI

import hashlib
import json
import time
import xml.etree.ElementTree as ET
import requests

from common.common import generate_uid, get_timestamp
from mall.config import WEIXIN_NOTIFY_URL
from yaozc import settings


def get_spbill_create_ip(meta):
    if 'HTTP_X_FORWARDED_FOR' in meta:
        spbill_create_ip = meta['HTTP_X_FORWARDED_FOR']
    else:
        spbill_create_ip = meta['REMOTE_ADDR']
    return spbill_create_ip


def key_value_url(value):
    """将将键值对转为 key1=value1&key2=value2
    """
    string_sign = ''
    for k in sorted(value.keys()):
        string_sign += "{0}={1}&".format(k, value[k])
    return string_sign


def get_sign(params, is_need_openid):
    """生成sign
    """
    params = generate_params(params, is_need_openid)
    stringA = key_value_url(params)
    stringSignTemp = stringA + 'key=' + settings.WEIXIN_PAY_APIKEY  # APIKEY, API密钥,需要在商户后台设置
    sign = hashlib.md5(stringSignTemp.encode('utf-8')).hexdigest().upper()
    params['sign'] = sign
    return params


def generate_params(params, is_need_openid):
    '''根据微信支付不同调用方式生成不同params'''
    if not is_need_openid:
        # params.pop('openid')
        del params['openid']
    else:
        # params.pop('scene_info')
        del params['scene_info']
    return params


def re_sign_and_generate_params(prpay_id):
    '''JSAPI支付获取到prepay_id后重新生成签名以及参数'''
    params = {
        'appId': settings.WEIXIN_PUBLIC_APPID,
        'timeStamp': get_timestamp(),
        'nonceStr': generate_uid(length=30),
        'package': 'prepay_id={}'.format(prpay_id),
        'signType': 'MD5',
    }
    stringA = key_value_url(params)
    stringSignTemp = stringA + 'key=' + settings.WEIXIN_PAY_APIKEY  # APIKEY, API密钥,需要在

你可能感兴趣的:(Django,微信支付,JSAPI,djnago)