日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

django-oscar-paypal出现UnicodeEncodeError: 'latin-1' codec can't encode characters in position XXXX

發布時間:2023/12/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 django-oscar-paypal出现UnicodeEncodeError: 'latin-1' codec can't encode characters in position XXXX 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

報錯來源于django-oscar-paypal,

當你把China設置為Shipping Country的時候,

http://127.0.0.1:8000/zh-cn/checkout/preview/

點擊右下角:

?

的時候,完整報錯信息如下:

INFO 2020-03-05 09:45:00,292 views 6063 140359598077696 Order #100002: beginning submission process for basket #2 INFO 2020-03-05 09:45:00,379 gateway 6063 140359598077696 Performing Authorize transaction (trxtype=A) params= VENDOR=appleyuchi@163.com&PWD=1qaz2wsx&USER=appleyuchi@163.com&PARTNER=PayPal&TRXTYPE=A&TENDER=C&AMT=115.95&ACCT=4959341977192070&CVV2=300&EXPDATE=0320&COMMENT1=100002&COMMENT2=&FIRSTNAME=名字&LASTNAME=姓氏&STREET=第一地址&CITY=c亨氏&STATE=&ZIP=315200&BILLTOCOUNTRY=&EMAIL=&PHONENUM=&CURRENCY=GBP response之前 url= https://pilot-payflowpro.paypal.com payload= VENDOR=appleyuchi@163.com&PWD=1qaz2wsx&USER=appleyuchi@163.com&PARTNER=PayPal&TRXTYPE=A&TENDER=C&AMT=115.95&ACCT=4959341977192070&CVV2=300&EXPDATE=0320&COMMENT1=100002&COMMENT2=&FIRSTNAME=名字&LASTNAME=姓氏&STREET=第一地址&CITY=c亨氏&STATE=&ZIP=315200&BILLTOCOUNTRY=&EMAIL=&PHONENUM=&CURRENCY=GBP ERROR 2020-03-05 09:45:02,829 views 6063 140359598077696 Order #100002: unhandled exception while taking payment ('latin-1' codec can't encode characters in position 188-189: Body ('名字') is not valid Latin-1. Use body.encode('utf-8') if you want to send it encoded in UTF-8.) Traceback (most recent call last):File "/home/appleyuchi/.virtualenvs/python3.7/lib/python3.7/site-packages/oscar/apps/checkout/views.py", line 575, in submitself.handle_payment(order_number, order_total, **payment_kwargs)File "/home/appleyuchi/桌面/RawStone/django-oscar-paypal/sandbox/apps/checkout/views.py", line 82, in handle_paymentkwargs['bankcard'], kwargs['billing_address'])File "/home/appleyuchi/桌面/RawStone/django-oscar-paypal/paypal/payflow/facade.py", line 30, in authorizegateway.authorize, order_number, amt, bankcard, billing_address)File "/home/appleyuchi/桌面/RawStone/django-oscar-paypal/paypal/payflow/facade.py", line 75, in _submit_payment_details**address_fields)File "/home/appleyuchi/桌面/RawStone/django-oscar-paypal/paypal/payflow/gateway.py", line 27, in authorizeamt, **kwargs)File "/home/appleyuchi/桌面/RawStone/django-oscar-paypal/paypal/payflow/gateway.py", line 79, in _submit_payment_detailsreturn _transaction(params)File "/home/appleyuchi/桌面/RawStone/django-oscar-paypal/paypal/payflow/gateway.py", line 203, in _transactionencode=FalseFile "/home/appleyuchi/桌面/RawStone/django-oscar-paypal/paypal/gateway.py", line 31, in postheaders={'content-type': 'text/namevalue; charset=utf-8'})File "/home/appleyuchi/.virtualenvs/python3.7/lib/python3.7/site-packages/requests/api.py", line 116, in postreturn request('post', url, data=data, json=json, **kwargs)File "/home/appleyuchi/.virtualenvs/python3.7/lib/python3.7/site-packages/requests/api.py", line 60, in requestreturn session.request(method=method, url=url, **kwargs)File "/home/appleyuchi/.virtualenvs/python3.7/lib/python3.7/site-packages/requests/sessions.py", line 533, in requestresp = self.send(prep, **send_kwargs)File "/home/appleyuchi/.virtualenvs/python3.7/lib/python3.7/site-packages/requests/sessions.py", line 646, in sendr = adapter.send(request, **kwargs)File "/home/appleyuchi/.virtualenvs/python3.7/lib/python3.7/site-packages/requests/adapters.py", line 449, in sendtimeout=timeoutFile "/home/appleyuchi/.virtualenvs/python3.7/lib/python3.7/site-packages/urllib3/connectionpool.py", line 672, in urlopenchunked=chunked,File "/home/appleyuchi/.virtualenvs/python3.7/lib/python3.7/site-packages/urllib3/connectionpool.py", line 387, in _make_requestconn.request(method, url, **httplib_request_kw)File "/usr/lib/python3.7/http/client.py", line 1252, in requestself._send_request(method, url, body, headers, encode_chunked)File "/usr/lib/python3.7/http/client.py", line 1297, in _send_requestbody = _encode(body, 'body')File "/usr/lib/python3.7/http/client.py", line 170, in _encode(name.title(), data[err.start:err.end], name)) from None UnicodeEncodeError: 'latin-1' codec can't encode characters in position 188-189: Body ('名字') is not valid Latin-1. Use body.encode('utf-8') if you want to send it encoded in UTF-8.

官方github的issue里不承認是bug,

解決方案如下(總共是修改兩個文件):

subl home/appleyuchi/桌面/RawStone/django-oscar-paypal/paypal/gateway.py

修改post函數

def post(url, params, encode=False):"""Make a POST request to the URL using the key-value pairs. Returna set of key-value pairs.:url: URL to post to:params: Dict of parameters to include in post payload"""print("params=",params)if encode:print("params=",params)payload = urlencode(params)else:payload = params# params=urlencode(params)# print("轉碼后的params=",params)start_time = time.time()print("response之前")print("url=",url)print("payload=",payload)payload=payload.encode('utf-8')response = requests.post(url, payload,headers={'content-type': 'text/namevalue; charset=utf-8'})if response.status_code != requests.codes.ok:raise exceptions.PayPalError("Unable to communicate with PayPal")# Convert response into a simple key-value formatpairs = {}for key, value in parse_qsl(response.text):print("key=",key)print("value=",value)pairs[key] = value# Add audit informationpairs['_raw_request'] = payloadpairs['_raw_response'] = response.textpairs['_response_time'] = (time.time() - start_time) * 1000.0return pairs

?

subl /home/appleyuchi/桌面/RawStone/django-oscar-paypal/paypal/payflow/models.py

里面的def save改為:

def save(self, *args, **kwargs):# print("**kwargs=",self.request)self.raw_request=self.raw_request.decode('utf-8')self.raw_request = re.sub(r'PWD=.+?&', 'PWD=XXXXXX&', self.raw_request)self.raw_request = re.sub(r'ACCT=\d+(\d{4})&', 'ACCT=XXXXXXXXXXXX\1&', self.raw_request)self.raw_request = re.sub(r'CVV2=\d+&', 'CVV2=XXX&', self.raw_request)return super(PayflowTransaction, self).save(*args, **kwargs)

?

?

總結

以上是生活随笔為你收集整理的django-oscar-paypal出现UnicodeEncodeError: 'latin-1' codec can't encode characters in position XXXX的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。