报错来源于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相关推荐

  1. UnicodeEncodeError: ‘latin-1‘ codec can‘t encode characters in position: ordinal not in range(256)

    UnicodeEncodeError: 'latin-1' codec can't encode characters in position: ordinal not in range(256) 目 ...

  2. 解决UnicodeEncodeError: ‘ascii‘ codec can‘t encode characters in position 问题(转)

    解决UnicodeEncodeError: 'ascii' codec can't encode characters in position 问题(转) 参考文章: (1)解决UnicodeEnco ...

  3. python3报错处理:UnicodeEncodeError: ‘ascii‘ codec can‘t encode characters in position 0-1

    一.背景说明 最开始不愿意使用Python,一大原因是因为Python2默认使用ASCII编码处理中文可以说是一件痛苦的事情.仅从更换默认编码一项变换,就可以说Python3和Python2不算同一门 ...

  4. [转]Python UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 的解决办法...

    UnicodeEncodeError: 'ascii' codec can't encode characters in position 的解决办法 python在安装时,默认的编码是ascii,当 ...

  5. UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

    在linux centos系统中使用python2.7.2对一个字符串解码然后输出,代码如下: s = "哈哈哈" print s.decode('utf-8') 结果报了如下的错 ...

  6. UnicodeEncodeError: 'UCS-2' codec can't encode characters in position 8-8: Non-BMP character not sup

    场景 报错信息如下: UnicodeEncodeError: 'UCS-2' codec can't encode characters in position 8-8: Non-BMP charac ...

  7. UnicodeEncodeError: ‘charmap‘ codec can‘t encode characters in position 0-1: character maps to <unde

    使用vc code,编辑python对数据进行入库时,出现如下错误: UnicodeEncodeError: 'charmap' codec can't encode characters in po ...

  8. requests请求get接口报错UnicodeEncodeError: ‘latin-1‘ codec can‘t encode characters in position 13-14

    一.问题描述 在做接口自动化测试时,调用requests的get方法发送请求,报错,报错信息如下: Traceback (most recent call last):File "D:\D1 ...

  9. UnicodeEncodeError: 'charmap' codec can't encode characters in position xx: character maps to undefi

    Windows server服務器部署報錯: UnicodeEncodeError: 'charmap' codec can't encode characters in position 44-54 ...

最新文章

  1. python encoding报错_python用requests递归查询页面 报错 ChunkedEncodingError
  2. nginx连接php-fpm sock文件失败502
  3. 简明python教程 豆瓣-福利分享:个人整理的Python书单,从基础到进阶
  4. Python实例--文本词频统计
  5. 查看systemctl或service启动服务日志
  6. amd 深度学习模型部署_Web服务部署深度学习模型-续集
  7. python 化学模块_Python chemif包_程序模块 - PyPI - Python中文网
  8. 数据结构基础(12) --双向循环链表的设计与实现
  9. 日出时的画面_如何拍摄日出日落,老摄影家近30年创作经验分享
  10. 多云架构下,JAVA微服务技术选型实例解析
  11. Semaphore1.8源码
  12. 用命令行快速打开软件
  13. 爬虫库之BeautifulSoup学习(三)
  14. 毕业设计之外卖点餐系统(App及后台)
  15. 大数据教孩子如何写好作文
  16. wifi共享大师开启失败发射功能失败
  17. CentOS 7 VM虚拟机安装docker步骤
  18. for in 中的index
  19. 8代处理器安装服务器系统,第八代cpu怎么安装win7
  20. POJ 1849 Two

热门文章

  1. 160804、oracle查询:取出每组中的第一条记录
  2. MSSQL数据库C#操作类(SQLHELPER类的修改版)
  3. MySQL 5.0-触发器
  4. WEB前端 vue学习一使用 vue-cli 搭建项目
  5. java中的布局文件改成,Android 动态设置布局文件的exception
  6. Error: listen EADDRINUSE: address already in use :::8080
  7. vue制作弹框,并且禁止滚动
  8. Spring中的事件机制
  9. Windows各种计时器
  10. 将自己的类封装为lib的方法