Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
slapos.core
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Léo-Paul Géneau
slapos.core
Commits
a8412788
Commit
a8412788
authored
Sep 26, 2019
by
Rafael Monnerat
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Revert "slapos_subscription_request: Implement Wechat payment automatically redirect"
This reverts commit
f629cf50
.
parent
904cacda
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
24 additions
and
31 deletions
+24
-31
master/bt5/slapos_subscription_request/ExtensionTemplateItem/portal_components/extension.erp5.WechatUtils.py
...plateItem/portal_components/extension.erp5.WechatUtils.py
+22
-29
master/bt5/slapos_subscription_request/ExtensionTemplateItem/portal_components/extension.erp5.WechatUtils.xml
...lateItem/portal_components/extension.erp5.WechatUtils.xml
+2
-2
No files found.
master/bt5/slapos_subscription_request/ExtensionTemplateItem/portal_components/extension.erp5.WechatUtils.py
View file @
a8412788
...
...
@@ -10,9 +10,11 @@ class WechatException(Exception):
super
(
WechatException
,
self
).
__init__
(
msg
)
CREATE_IP
=
""
# The IP address which request the order to Wechat, aka: instance IP
# UFDODER_URL = "https://api.mch.weixin.qq.com/sandboxnew/pay/unifiedorder" # Wechat unified order API
UFDODER_URL
=
"https://api.mch.weixin.qq.com/pay/unifiedorder"
# Wechat unified order API
QUERY_URL
=
"https://api.mch.weixin.qq.com/pay/orderquery"
QUERY_URL
=
"https://api.mch.weixin.qq.com/sandboxnew/pay/orderquery"
def
generateRandomStr
(
random_length
=
24
):
...
...
@@ -64,7 +66,9 @@ def convert_xml_to_dict(xml_content):
return
dict_content
def
convert_dict_to_xml
(
dict_content
):
def
convert_dict_to_xml
(
self
,
dict_content
):
wechat_account_configuration
=
self
.
ERP5Site_getWechatPaymentConfiguration
()
dict_content
[
'sign'
]
=
calculateSign
(
dict_content
,
wechat_account_configuration
[
'API_KEY'
])
xml
=
''
for
key
,
value
in
dict_content
.
items
():
xml
+=
'<{0}>{1}</{0}>'
.
format
(
key
,
value
)
...
...
@@ -103,7 +107,7 @@ def getSandboxKey(self):
def
getWechatQRCodeURL
(
self
,
order_id
,
price
,
amount
):
portal
=
self
.
getPortalObject
()
base_url
=
portal
.
absolute_url
()
NOTIFY_URL
=
base_url
+
"/
ERP5Site_receiveWechatPaymentCallback
"
# Wechat payment callback method
NOTIFY_URL
=
base_url
+
"/
Base_receiveWechatPaymentNotify
"
# Wechat payment callback method
wechat_account_configuration
=
self
.
ERP5Site_getWechatPaymentConfiguration
()
appid
=
wechat_account_configuration
[
'APP_ID'
]
mch_id
=
wechat_account_configuration
[
'MCH_ID'
]
...
...
@@ -124,12 +128,11 @@ def getWechatQRCodeURL(self, order_id, price, amount):
params
[
'nonce_str'
]
=
nonce_str
params
[
'out_trade_no'
]
=
order_id
.
encode
(
'utf-8'
)
# This is for sandbox test, sandbox need the total_fee equal to 101 exactly
# params['total_fee'] = 101 # int(-(price * 100)) # unit is Fen, 1 CNY = 100 Fen
params
[
'total_fee'
]
=
int
(
-
(
price
*
100
))
# unit is Fen, 1 CNY(RMB) = 100 Fen
# params['total_fee'] = 1 #int(-(price * 100)) # unit is Fen, 1 CNY = 100 Fen
# params['total_fee'] = 101 # int(-(price * 100)) # unit is Fen, 1 CHY = 100 Fen
params
[
'total_fee'
]
=
int
(
-
(
price
*
100
))
# unit is Fen, 1 CHY = 100 Fen
params
[
'spbill_create_ip'
]
=
spbill_create_ip
params
[
'notify_url'
]
=
notify_url
params
[
'body'
]
=
"Rapid Space V
irtual M
achine"
.
encode
(
'utf-8'
)
params
[
'body'
]
=
"Rapid Space V
M m
achine"
.
encode
(
'utf-8'
)
params
[
'trade_type'
]
=
trade_type
# generate signature
...
...
@@ -184,18 +187,14 @@ def receiveWechatPaymentNotify(self, request, *args, **kwargs):
<transaction_id><![CDATA[4200000031201712112434025551875]]></transaction_id>
</xml>
'''
wechat_account_configuration
=
self
.
ERP5Site_getWechatPaymentConfiguration
()
params
=
convert_xml_to_dict
(
request
.
body
)
# TODO: Currently we query wechat order by calling queryWechatOrderStatus manually
# Need to implement this too.
raise
Exception
(
params
)
return
'''
<xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[OK]]></return_msg>
</xml>
'''
wechat_account_configuration
=
self
.
ERP5Site_getWechatPaymentConfiguration
()
params
=
convert_xml_to_dict
(
request
.
body
)
if
params
.
get
(
"return_code"
)
==
"SUCCESS"
:
# Connection is ok
sign
=
params
.
pop
(
'sign'
)
...
...
@@ -230,6 +229,7 @@ def queryWechatOrderStatus(self, dict_content):
- transaction_id (str): wechat order number, use this in higher priority, it will return in the payment notify callback
- out_trade_no(str): The order ID used inside ERP5, less than 32 characters, digits, alphabets, and "_-|*@", unique in ERP5
'''
return
"XXXS"
if
"transaction_id"
not
in
dict_content
and
"out_trade_no"
not
in
dict_content
:
raise
WechatException
(
"transaction_id or out_trade_no is needed for query the Wechat Order"
)
wechat_account_configuration
=
self
.
ERP5Site_getWechatPaymentConfiguration
()
...
...
@@ -239,23 +239,16 @@ def queryWechatOrderStatus(self, dict_content):
"mch_id"
:
wechat_account_configuration
[
'MCH_ID'
],
"nonce_str"
:
generateRandomStr
(),
#
"transaction_id": dict_content.get("transaction_id", ""),
"transaction_id"
:
dict_content
.
get
(
"transaction_id"
,
""
),
"out_trade_no"
:
dict_content
.
get
(
"out_trade_no"
,
""
),
}
sign
=
calculateSign
(
params
,
wechat_account_configuration
[
'API_KEY'
])
params
[
"sign"
]
=
sign
xml_str
=
convert_dict_to_xml
(
params
)
result
=
urllib2
.
Request
(
QUERY_URL
,
data
=
xml_str
)
result_data
=
urllib2
.
urlopen
(
result
)
result_read
=
result_data
.
read
()
result_dict_content
=
convert_xml_to_dict
(
result_read
)
return_code
=
result_dict_content
[
'return_code'
]
if
return_code
==
"SUCCESS"
:
result_code
=
result_dict_content
[
'result_code'
]
if
result_code
==
"SUCCESS"
:
return
result_dict_content
[
'trade_state'
]
else
:
raise
Exception
(
"Error description: {0}"
.
format
(
result_dict_content
.
get
(
"err_code_des"
)))
else
:
raise
Exception
(
"Error description: {0}"
.
format
(
result_dict_content
.
get
(
"return_msg"
)))
# xml_str = convert_dict_to_xml(params)
return
None
# return "SUCCESS"
# result = urllib2.Request(QUERY_URL, data=xml_str)
# result_data = urllib2.urlopen(result)
# result_read = result_data.read()
#result_dict_content = convert_xml_to_dict(result_read)
# TBC
master/bt5/slapos_subscription_request/ExtensionTemplateItem/portal_components/extension.erp5.WechatUtils.xml
View file @
a8412788
...
...
@@ -46,8 +46,8 @@
<key>
<string>
text_content_warning_message
</string>
</key>
<value>
<tuple>
<string>
W:19
3
, 2: Unreachable code (unreachable)
</string>
<string>
W:
199
, 2: Unreachable code (unreachable)
</string>
<string>
W:19
6
, 2: Unreachable code (unreachable)
</string>
<string>
W:
233
, 2: Unreachable code (unreachable)
</string>
</tuple>
</value>
</item>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment