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
最新推荐文章于 2024-07-24 18:07:25 发布
本文介绍如何在Django项目中集成微信JSAPI支付,包括配置支付接口、生成支付预订单及处理支付回调等关键步骤。
摘要由CSDN通过智能技术生成