|
@@ -7,6 +7,12 @@ import requests
|
|
import xmltodict
|
|
import xmltodict
|
|
|
|
|
|
from Ansjer.config import BASE_DIR
|
|
from Ansjer.config import BASE_DIR
|
|
|
|
+from django.conf import settings
|
|
|
|
+WX_APPID = settings.WX_APPID
|
|
|
|
+WX_MCHID = settings.WX_MCHID
|
|
|
|
+WX_APIKEY = settings.WX_APIKEY
|
|
|
|
+WX_CERT = settings.WX_CERT
|
|
|
|
+WX_KEY = settings.WX_KEY
|
|
|
|
|
|
|
|
|
|
class WechatPayObject:
|
|
class WechatPayObject:
|
|
@@ -15,13 +21,13 @@ class WechatPayObject:
|
|
|
|
|
|
def __init__(self):
|
|
def __init__(self):
|
|
# 开发者调用支付统一下单API生成预交易单
|
|
# 开发者调用支付统一下单API生成预交易单
|
|
- self.APPID = 'wx2a9f5ef9baf2760f'
|
|
|
|
|
|
+ self.APPID = WX_APPID
|
|
# 商户id
|
|
# 商户id
|
|
- self.MCHID = '1508209741'
|
|
|
|
|
|
+ self.MCHID = WX_MCHID
|
|
# 异步通知url,商户根据实际开发过程设定
|
|
# 异步通知url,商户根据实际开发过程设定
|
|
self.NOTIFY_URL = 'test'
|
|
self.NOTIFY_URL = 'test'
|
|
self.TRADE_TYPE = 'APP'
|
|
self.TRADE_TYPE = 'APP'
|
|
- self.APIKEY = 'ZHansjeransjeransjer680301000000'
|
|
|
|
|
|
+ self.APIKEY = WX_APIKEY
|
|
self.url = 'https://api.mch.weixin.qq.com/pay/unifiedorder' # 微信请求url
|
|
self.url = 'https://api.mch.weixin.qq.com/pay/unifiedorder' # 微信请求url
|
|
self.refund_url = 'https://api.mch.weixin.qq.com/secapi/pay/refund' # 退款url
|
|
self.refund_url = 'https://api.mch.weixin.qq.com/secapi/pay/refund' # 退款url
|
|
self.downloadbill_url = 'https://api.mch.weixin.qq.com/pay/downloadbill' # 账单url
|
|
self.downloadbill_url = 'https://api.mch.weixin.qq.com/pay/downloadbill' # 账单url
|
|
@@ -218,11 +224,13 @@ class WechatPayObject:
|
|
# doc: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_3
|
|
# doc: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_3
|
|
string_sign = "&".join(['{}={}'.format(k, params[k]) for k in sorted(params)] + ['key={}'.format(self.APIKEY)])
|
|
string_sign = "&".join(['{}={}'.format(k, params[k]) for k in sorted(params)] + ['key={}'.format(self.APIKEY)])
|
|
params['sign'] = hashlib.md5(string_sign.encode('utf8')).hexdigest().upper() # MD5签名
|
|
params['sign'] = hashlib.md5(string_sign.encode('utf8')).hexdigest().upper() # MD5签名
|
|
- xml = "<xml>{}</xml>".format("".join(['<{k}>{v}</{k}>'.format(k=k, v=v) for k, v in params.items()])) # 数据拼接成xml格式
|
|
|
|
- cert = '{}/Ansjer/file/wechatpay/apiclient_cert.pem'.format(BASE_DIR)
|
|
|
|
- key = '{}/Ansjer/file/wechatpay/apiclient_key.pem'.format(BASE_DIR)
|
|
|
|
- r = requests.post(url=self.refund_url, headers={'Content-Type': 'text/xml'}, data=xml.encode('utf-8'),
|
|
|
|
- cert=(cert, key), verify=True)
|
|
|
|
|
|
+ # 数据拼接成xml格式
|
|
|
|
+ xml = "<xml>{}</xml>".format("".join(['<{k}>{v}</{k}>'.format(k=k, v=v) for k, v in params.items()]))
|
|
|
|
+ cert = BASE_DIR + WX_CERT
|
|
|
|
+ key = BASE_DIR + WX_KEY
|
|
|
|
+ r = requests.post(
|
|
|
|
+ url=self.refund_url, headers={'Content-Type': 'text/xml'}, data=xml.encode('utf-8'),
|
|
|
|
+ cert=(cert, key), verify=True)
|
|
response = xmltodict.parse(r.text)
|
|
response = xmltodict.parse(r.text)
|
|
if response['xml']['result_code'] == 'SUCCESS':
|
|
if response['xml']['result_code'] == 'SUCCESS':
|
|
return True
|
|
return True
|