xml格式错误
来源:12-6 支付下单和拉起支付功能
慕圣4887435
2020-05-02
老师,我还没有申请支付,然后用其他字符串代替,显示xml格式错误(如图)
顺序和其他同学的有点不同会不会影响?
是不是只要申请支付后有mch和paykey就可以了?
写回答
4回答
-
编程浪子
2020-05-04
你好
你这种没有就把prepay_id 设置为 0 看看,大致的意识就把这个东西绕过去
pay_order_info.prepay_id = pay_info['prepay_id'] if pay_info['prepay_id'] != None else 0
或者直接把如下几行删除了
#保存prepay_id为了后面发模板消息 pay_order_info.prepay_id = pay_info['prepay_id'] db.session.add( pay_order_info ) db.session.commit()
00 -
慕圣4887435
提问者
2020-05-03
首先,点击支付后报500 错误,其中提示prepay_id为空
我就把prepay_id来源打印出来查看
由于没有paykey,报了xml格式错误,没有prepay_id
请问这种情况,除了没有paykey的原因外,有没有我的操作错误呢?
还没看12-18章,请问有能解决的办法吗
00 -
编程浪子
2020-05-02
你好
没明白什么意思? 如果要做支付就必然是要申请支付权限的。
课程后面也做了更新,担心大家没有支付权限,给大家做了一些方法让大家体验过程
022020-05-03 -
慕圣4887435
提问者
2020-05-02
import hashlib,requests,uuid import xml.etree.ElementTree as ET from application import app class WeChatService(): def __init__(self,merchant_key = None): self.merchant_key = merchant_key def create_sign(self,pay_data): ''' 生产签名 :param pay_data: :return: ''' stringA = "&".join(["{0}={1}".format( k,pay_data.get(k) ) for k in sorted( pay_data )] ) stringSignTemp = '{0}&key={1}'.format( stringA,self.merchant_key ) sign = hashlib.md5( stringSignTemp.encode("utf-8") ).hexdigest() return sign.upper() def get_pay_info(self,pay_data = None): ''' 获取支付信息 ''' sign = self.create_sign( pay_data ) pay_data['sign'] = sign xml_data = self.dic_to_xml( pay_data ) headers = { 'Content-Type':'application/xml' } url = "https://api.mch.weixin.qq.com/pay/unifiedorder" r = requests.post( url = url, data = xml_data.encode("utf-8"), headers = headers) r.encoding = "utf-8" app.logger.info(r.text) app.logger.info(xml_data) def dic_to_xml(self,dict_data): ''' dict to xml :param dict_data: :return: ''' xml = [ "<xml>" ] for k,v in dict_data.items(): xml.append( "<{0}>{1}</{0}>".format(k,v) ) xml.append( "<xml>" ) return "".join( xml ) def xml_to_dic(self,xml_data): ''' xml to dict :param xml_data: :return: ''' xml_dict = {} root = ET.fromstring(xml_data) for child in root: xml_dict[ child.tag ] = child.text return xml_dict def get_nonce_str(self): return str( uuid.uuid4() ).replace('-', '')
上面的是WeChatService,下面的是Order.py里的内容
target_wechat = WeChatService( merchant_key = config_mina['paykey'] ) data = { 'appid': config_mina['appid'], 'mch_id': config_mina['mch_id'], 'nonce_str': target_wechat.get_nonce_str(), 'body': '订餐', # 商品描述 'out_trade_no': pay_order_info.order_sn, # 商户订单号 'total_fee': int(pay_order_info.total_price * 100), 'notify_url': notify_url, 'trade_type': "JSAPI", 'openid': oauth_bind_info.openid } target_wechat.get_pay_info( data )
012020-05-04
相似问题