Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
study
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Damon
study
Commits
c8c06aa3
Commit
c8c06aa3
authored
Jul 14, 2021
by
Damon
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat(pay): 微信支付
parent
56b465a6
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
289 additions
and
6 deletions
+289
-6
common.js
src/api/common.js
+3
-2
http.interceptor.js
src/common/http.interceptor.js
+2
-2
md5.js
src/common/md5.js
+220
-0
manifest.json
src/manifest.json
+1
-1
mine.vue
src/pages/index/mine.vue
+1
-0
detail.vue
src/pages/learn/detail.vue
+59
-0
index.vue
src/pages/login/index.vue
+1
-0
index.js
src/store/index.js
+2
-1
No files found.
src/api/common.js
View file @
c8c06aa3
let
commonApiFun
=
function
(
vm
)
{
let
commonApiFun
=
function
(
vm
)
{
let
loginWechatAuth
=
async
(
params
=
{})
=>
await
vm
.
$u
.
post
(
'/wxapp/unify/authorization'
,
params
)
let
loginWechatAuth
=
async
(
params
=
{})
=>
await
vm
.
$u
.
post
(
'/wxapp/unify/authorization'
,
params
)
let
payOrder
=
async
(
params
=
{})
=>
await
vm
.
$u
.
post
(
'/pay/order'
,
params
)
const
commonApi
=
{
const
commonApi
=
{
loginWechatAuth
loginWechatAuth
,
payOrder
}
}
return
commonApi
return
commonApi
}
}
...
...
src/common/http.interceptor.js
View file @
c8c06aa3
...
@@ -6,7 +6,7 @@ const install = (Vue, vm) => {
...
@@ -6,7 +6,7 @@ const install = (Vue, vm) => {
Vue
.
prototype
.
$u
.
http
.
setConfig
({
Vue
.
prototype
.
$u
.
http
.
setConfig
({
baseUrl
:
systemApiUrl
,
baseUrl
:
systemApiUrl
,
header
:
{
header
:
{
channel
:
'Applets'
,
'channel'
:
'Applets'
,
'content-type'
:
'application/json; charset=utf-8'
,
'content-type'
:
'application/json; charset=utf-8'
,
},
},
loadingTime
:
0
,
loadingTime
:
0
,
...
@@ -17,6 +17,7 @@ const install = (Vue, vm) => {
...
@@ -17,6 +17,7 @@ const install = (Vue, vm) => {
Vue
.
prototype
.
$u
.
http
.
interceptor
.
request
=
(
config
)
=>
{
Vue
.
prototype
.
$u
.
http
.
interceptor
.
request
=
(
config
)
=>
{
// 引用token
// 引用token
// const token = vm.vuex_token
// const token = vm.vuex_token
config
.
header
.
token
=
vm
.
vuex_token
// const reg = /\?\w+/
// const reg = /\?\w+/
// if(config.url.indexOf('access-token=') >=0 && config.params['access-token']){
// if(config.url.indexOf('access-token=') >=0 && config.params['access-token']){
// // 给默认参数增加access-token (Java端)
// // 给默认参数增加access-token (Java端)
...
@@ -26,7 +27,6 @@ const install = (Vue, vm) => {
...
@@ -26,7 +27,6 @@ const install = (Vue, vm) => {
// config.url += '?access-token=' + token
// config.url += '?access-token=' + token
// }
// }
// }
// }
// 最后需要将config进行return
// 最后需要将config进行return
return
config
;
return
config
;
// 如果return一个false值,则会取消本次请求
// 如果return一个false值,则会取消本次请求
...
...
src/common/md5.js
0 → 100644
View file @
c8c06aa3
/*
* A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
* Digest Algorithm, as defined in RFC 1321.
* Version 1.1 Copyright (C) Paul Johnston 1999 - 2002.
* Code also contributed by Greg Holt
* See http://pajhome.org.uk/site/legal.html for details.
*/
/*
* Add integers, wrapping at 2^32. This uses 16-bit operations internally
* to work around bugs in some JS interpreters.
*/
function
safe_add
(
x
,
y
)
{
var
lsw
=
(
x
&
0xFFFF
)
+
(
y
&
0xFFFF
)
var
msw
=
(
x
>>
16
)
+
(
y
>>
16
)
+
(
lsw
>>
16
)
return
(
msw
<<
16
)
|
(
lsw
&
0xFFFF
)
}
/*
* Bitwise rotate a 32-bit number to the left.
*/
function
rol
(
num
,
cnt
)
{
return
(
num
<<
cnt
)
|
(
num
>>>
(
32
-
cnt
))
}
/*
* These functions implement the four basic operations the algorithm uses.
*/
function
cmn
(
q
,
a
,
b
,
x
,
s
,
t
)
{
return
safe_add
(
rol
(
safe_add
(
safe_add
(
a
,
q
),
safe_add
(
x
,
t
)),
s
),
b
)
}
function
ff
(
a
,
b
,
c
,
d
,
x
,
s
,
t
)
{
return
cmn
((
b
&
c
)
|
((
~
b
)
&
d
),
a
,
b
,
x
,
s
,
t
)
}
function
gg
(
a
,
b
,
c
,
d
,
x
,
s
,
t
)
{
return
cmn
((
b
&
d
)
|
(
c
&
(
~
d
)),
a
,
b
,
x
,
s
,
t
)
}
function
hh
(
a
,
b
,
c
,
d
,
x
,
s
,
t
)
{
return
cmn
(
b
^
c
^
d
,
a
,
b
,
x
,
s
,
t
)
}
function
ii
(
a
,
b
,
c
,
d
,
x
,
s
,
t
)
{
return
cmn
(
c
^
(
b
|
(
~
d
)),
a
,
b
,
x
,
s
,
t
)
}
/*
* Calculate the MD5 of an array of little-endian words, producing an array
* of little-endian words.
*/
function
coreMD5
(
x
)
{
var
a
=
1732584193
var
b
=
-
271733879
var
c
=
-
1732584194
var
d
=
271733878
for
(
var
i
=
0
;
i
<
x
.
length
;
i
+=
16
)
{
var
olda
=
a
var
oldb
=
b
var
oldc
=
c
var
oldd
=
d
a
=
ff
(
a
,
b
,
c
,
d
,
x
[
i
+
0
],
7
,
-
680876936
)
d
=
ff
(
d
,
a
,
b
,
c
,
x
[
i
+
1
],
12
,
-
389564586
)
c
=
ff
(
c
,
d
,
a
,
b
,
x
[
i
+
2
],
17
,
606105819
)
b
=
ff
(
b
,
c
,
d
,
a
,
x
[
i
+
3
],
22
,
-
1044525330
)
a
=
ff
(
a
,
b
,
c
,
d
,
x
[
i
+
4
],
7
,
-
176418897
)
d
=
ff
(
d
,
a
,
b
,
c
,
x
[
i
+
5
],
12
,
1200080426
)
c
=
ff
(
c
,
d
,
a
,
b
,
x
[
i
+
6
],
17
,
-
1473231341
)
b
=
ff
(
b
,
c
,
d
,
a
,
x
[
i
+
7
],
22
,
-
45705983
)
a
=
ff
(
a
,
b
,
c
,
d
,
x
[
i
+
8
],
7
,
1770035416
)
d
=
ff
(
d
,
a
,
b
,
c
,
x
[
i
+
9
],
12
,
-
1958414417
)
c
=
ff
(
c
,
d
,
a
,
b
,
x
[
i
+
10
],
17
,
-
42063
)
b
=
ff
(
b
,
c
,
d
,
a
,
x
[
i
+
11
],
22
,
-
1990404162
)
a
=
ff
(
a
,
b
,
c
,
d
,
x
[
i
+
12
],
7
,
1804603682
)
d
=
ff
(
d
,
a
,
b
,
c
,
x
[
i
+
13
],
12
,
-
40341101
)
c
=
ff
(
c
,
d
,
a
,
b
,
x
[
i
+
14
],
17
,
-
1502002290
)
b
=
ff
(
b
,
c
,
d
,
a
,
x
[
i
+
15
],
22
,
1236535329
)
a
=
gg
(
a
,
b
,
c
,
d
,
x
[
i
+
1
],
5
,
-
165796510
)
d
=
gg
(
d
,
a
,
b
,
c
,
x
[
i
+
6
],
9
,
-
1069501632
)
c
=
gg
(
c
,
d
,
a
,
b
,
x
[
i
+
11
],
14
,
643717713
)
b
=
gg
(
b
,
c
,
d
,
a
,
x
[
i
+
0
],
20
,
-
373897302
)
a
=
gg
(
a
,
b
,
c
,
d
,
x
[
i
+
5
],
5
,
-
701558691
)
d
=
gg
(
d
,
a
,
b
,
c
,
x
[
i
+
10
],
9
,
38016083
)
c
=
gg
(
c
,
d
,
a
,
b
,
x
[
i
+
15
],
14
,
-
660478335
)
b
=
gg
(
b
,
c
,
d
,
a
,
x
[
i
+
4
],
20
,
-
405537848
)
a
=
gg
(
a
,
b
,
c
,
d
,
x
[
i
+
9
],
5
,
568446438
)
d
=
gg
(
d
,
a
,
b
,
c
,
x
[
i
+
14
],
9
,
-
1019803690
)
c
=
gg
(
c
,
d
,
a
,
b
,
x
[
i
+
3
],
14
,
-
187363961
)
b
=
gg
(
b
,
c
,
d
,
a
,
x
[
i
+
8
],
20
,
1163531501
)
a
=
gg
(
a
,
b
,
c
,
d
,
x
[
i
+
13
],
5
,
-
1444681467
)
d
=
gg
(
d
,
a
,
b
,
c
,
x
[
i
+
2
],
9
,
-
51403784
)
c
=
gg
(
c
,
d
,
a
,
b
,
x
[
i
+
7
],
14
,
1735328473
)
b
=
gg
(
b
,
c
,
d
,
a
,
x
[
i
+
12
],
20
,
-
1926607734
)
a
=
hh
(
a
,
b
,
c
,
d
,
x
[
i
+
5
],
4
,
-
378558
)
d
=
hh
(
d
,
a
,
b
,
c
,
x
[
i
+
8
],
11
,
-
2022574463
)
c
=
hh
(
c
,
d
,
a
,
b
,
x
[
i
+
11
],
16
,
1839030562
)
b
=
hh
(
b
,
c
,
d
,
a
,
x
[
i
+
14
],
23
,
-
35309556
)
a
=
hh
(
a
,
b
,
c
,
d
,
x
[
i
+
1
],
4
,
-
1530992060
)
d
=
hh
(
d
,
a
,
b
,
c
,
x
[
i
+
4
],
11
,
1272893353
)
c
=
hh
(
c
,
d
,
a
,
b
,
x
[
i
+
7
],
16
,
-
155497632
)
b
=
hh
(
b
,
c
,
d
,
a
,
x
[
i
+
10
],
23
,
-
1094730640
)
a
=
hh
(
a
,
b
,
c
,
d
,
x
[
i
+
13
],
4
,
681279174
)
d
=
hh
(
d
,
a
,
b
,
c
,
x
[
i
+
0
],
11
,
-
358537222
)
c
=
hh
(
c
,
d
,
a
,
b
,
x
[
i
+
3
],
16
,
-
722521979
)
b
=
hh
(
b
,
c
,
d
,
a
,
x
[
i
+
6
],
23
,
76029189
)
a
=
hh
(
a
,
b
,
c
,
d
,
x
[
i
+
9
],
4
,
-
640364487
)
d
=
hh
(
d
,
a
,
b
,
c
,
x
[
i
+
12
],
11
,
-
421815835
)
c
=
hh
(
c
,
d
,
a
,
b
,
x
[
i
+
15
],
16
,
530742520
)
b
=
hh
(
b
,
c
,
d
,
a
,
x
[
i
+
2
],
23
,
-
995338651
)
a
=
ii
(
a
,
b
,
c
,
d
,
x
[
i
+
0
],
6
,
-
198630844
)
d
=
ii
(
d
,
a
,
b
,
c
,
x
[
i
+
7
],
10
,
1126891415
)
c
=
ii
(
c
,
d
,
a
,
b
,
x
[
i
+
14
],
15
,
-
1416354905
)
b
=
ii
(
b
,
c
,
d
,
a
,
x
[
i
+
5
],
21
,
-
57434055
)
a
=
ii
(
a
,
b
,
c
,
d
,
x
[
i
+
12
],
6
,
1700485571
)
d
=
ii
(
d
,
a
,
b
,
c
,
x
[
i
+
3
],
10
,
-
1894986606
)
c
=
ii
(
c
,
d
,
a
,
b
,
x
[
i
+
10
],
15
,
-
1051523
)
b
=
ii
(
b
,
c
,
d
,
a
,
x
[
i
+
1
],
21
,
-
2054922799
)
a
=
ii
(
a
,
b
,
c
,
d
,
x
[
i
+
8
],
6
,
1873313359
)
d
=
ii
(
d
,
a
,
b
,
c
,
x
[
i
+
15
],
10
,
-
30611744
)
c
=
ii
(
c
,
d
,
a
,
b
,
x
[
i
+
6
],
15
,
-
1560198380
)
b
=
ii
(
b
,
c
,
d
,
a
,
x
[
i
+
13
],
21
,
1309151649
)
a
=
ii
(
a
,
b
,
c
,
d
,
x
[
i
+
4
],
6
,
-
145523070
)
d
=
ii
(
d
,
a
,
b
,
c
,
x
[
i
+
11
],
10
,
-
1120210379
)
c
=
ii
(
c
,
d
,
a
,
b
,
x
[
i
+
2
],
15
,
718787259
)
b
=
ii
(
b
,
c
,
d
,
a
,
x
[
i
+
9
],
21
,
-
343485551
)
a
=
safe_add
(
a
,
olda
)
b
=
safe_add
(
b
,
oldb
)
c
=
safe_add
(
c
,
oldc
)
d
=
safe_add
(
d
,
oldd
)
}
return
[
a
,
b
,
c
,
d
]
}
/*
* Convert an array of little-endian words to a hex string.
*/
function
binl2hex
(
binarray
)
{
var
hex_tab
=
"0123456789abcdef"
var
str
=
""
for
(
var
i
=
0
;
i
<
binarray
.
length
*
4
;
i
++
)
{
str
+=
hex_tab
.
charAt
((
binarray
[
i
>>
2
]
>>
((
i
%
4
)
*
8
+
4
))
&
0xF
)
+
hex_tab
.
charAt
((
binarray
[
i
>>
2
]
>>
((
i
%
4
)
*
8
))
&
0xF
)
}
return
str
}
/*
* Convert an array of little-endian words to a base64 encoded string.
*/
function
binl2b64
(
binarray
)
{
var
tab
=
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
var
str
=
""
for
(
var
i
=
0
;
i
<
binarray
.
length
*
32
;
i
+=
6
)
{
str
+=
tab
.
charAt
(((
binarray
[
i
>>
5
]
<<
(
i
%
32
))
&
0x3F
)
|
((
binarray
[
i
>>
5
+
1
]
>>
(
32
-
i
%
32
))
&
0x3F
))
}
return
str
}
/*
* Convert an 8-bit character string to a sequence of 16-word blocks, stored
* as an array, and append appropriate padding for MD4/5 calculation.
* If any of the characters are >255, the high byte is silently ignored.
*/
function
str2binl
(
str
)
{
var
nblk
=
((
str
.
length
+
8
)
>>
6
)
+
1
// number of 16-word blocks
var
blks
=
new
Array
(
nblk
*
16
)
for
(
var
i
=
0
;
i
<
nblk
*
16
;
i
++
)
blks
[
i
]
=
0
for
(
var
i
=
0
;
i
<
str
.
length
;
i
++
)
blks
[
i
>>
2
]
|=
(
str
.
charCodeAt
(
i
)
&
0xFF
)
<<
((
i
%
4
)
*
8
)
blks
[
i
>>
2
]
|=
0x80
<<
((
i
%
4
)
*
8
)
blks
[
nblk
*
16
-
2
]
=
str
.
length
*
8
return
blks
}
/*
* Convert a wide-character string to a sequence of 16-word blocks, stored as
* an array, and append appropriate padding for MD4/5 calculation.
*/
function
strw2binl
(
str
)
{
var
nblk
=
((
str
.
length
+
4
)
>>
5
)
+
1
// number of 16-word blocks
var
blks
=
new
Array
(
nblk
*
16
)
for
(
var
i
=
0
;
i
<
nblk
*
16
;
i
++
)
blks
[
i
]
=
0
for
(
var
i
=
0
;
i
<
str
.
length
;
i
++
)
blks
[
i
>>
1
]
|=
str
.
charCodeAt
(
i
)
<<
((
i
%
2
)
*
16
)
blks
[
i
>>
1
]
|=
0x80
<<
((
i
%
2
)
*
16
)
blks
[
nblk
*
16
-
2
]
=
str
.
length
*
16
return
blks
}
/*
* External interface
*/
function
hexMD5
(
str
)
{
return
binl2hex
(
coreMD5
(
str2binl
(
str
)))
}
function
hexMD5w
(
str
)
{
return
binl2hex
(
coreMD5
(
strw2binl
(
str
)))
}
function
b64MD5
(
str
)
{
return
binl2b64
(
coreMD5
(
str2binl
(
str
)))
}
function
b64MD5w
(
str
)
{
return
binl2b64
(
coreMD5
(
strw2binl
(
str
)))
}
/* Backward compatibility */
function
calcMD5
(
str
)
{
return
binl2hex
(
coreMD5
(
str2binl
(
str
)))
}
module
.
exports
=
{
hexMD5
:
hexMD5
}
\ No newline at end of file
src/manifest.json
View file @
c8c06aa3
...
@@ -55,7 +55,7 @@
...
@@ -55,7 +55,7 @@
/*
快应用特有相关
*/
/*
快应用特有相关
*/
"mp-weixin"
:
{
"mp-weixin"
:
{
/*
微信小程序特有相关
*/
/*
微信小程序特有相关
*/
"appid"
:
"wx
fd20fa0ca340284b
"
,
"appid"
:
"wx
d1d6eede324b0465
"
,
"setting"
:
{
"setting"
:
{
"urlCheck"
:
false
,
"urlCheck"
:
false
,
"es6"
:
true
"es6"
:
true
...
...
src/pages/index/mine.vue
View file @
c8c06aa3
...
@@ -67,6 +67,7 @@ export default {
...
@@ -67,6 +67,7 @@ export default {
},
},
logout
()
{
logout
()
{
this
.
$u
.
vuex
(
'vuex_token'
,
''
)
this
.
$u
.
vuex
(
'vuex_token'
,
''
)
this
.
$u
.
vuex
(
'openId'
,
''
)
this
.
$u
.
vuex
(
'userInfo'
,
{})
this
.
$u
.
vuex
(
'userInfo'
,
{})
},
},
},
},
...
...
src/pages/learn/detail.vue
View file @
c8c06aa3
<
template
>
<view>
<u-button
type=
"primary"
@
click=
"pay"
>
微信支付测试
</u-button>
</view>
</
template
>
<
script
>
import
md5
from
'@/common/md5.js'
export
default
{
components
:
{},
data
()
{
return
{
lists
:
[
{
questionWarehouseId
:
1
,
amount
:
0.01
,
count
:
1
,
},
],
}
},
created
()
{},
methods
:
{
pay
()
{
const
data
=
{
instrtutionId
:
1
,
orders
:
JSON
.
stringify
(
this
.
lists
),
openId
:
this
.
openId
,
}
this
.
$u
.
api
.
payOrder
(
data
).
then
((
result
)
=>
{
const
timeStamp
=
String
(
Date
.
now
())
const
paySign
=
md5
.
hexMD5
(
`appId=wxd1d6eede324b0465&nonceStr=
${
result
.
nonce_str
}
&package=prepay_id=
${
result
.
prepay_id
}
&signType=MD5&timeStamp=
${
timeStamp
}
&key=weixiuhui20151a2b3c4d5e6f7g8h9ij`
)
.
toUpperCase
()
uni
.
requestPayment
({
provider
:
'wxpay'
,
timeStamp
:
timeStamp
,
nonceStr
:
result
.
nonce_str
,
package
:
`prepay_id=
${
result
.
prepay_id
}
`
,
signType
:
'MD5'
,
paySign
:
paySign
,
success
:
(
res
)
=>
{
console
.
log
(
'success:'
+
JSON
.
stringify
(
res
))
this
.
$u
.
toast
(
'支付成功'
)
},
fail
:
(
err
)
=>
{
console
.
log
(
'fail:'
+
JSON
.
stringify
(
err
))
this
.
$u
.
toast
(
'支付失败'
)
},
})
})
},
},
}
</
script
>
<
style
lang=
"scss"
scoped
></
style
>
src/pages/login/index.vue
View file @
c8c06aa3
...
@@ -39,6 +39,7 @@ export default {
...
@@ -39,6 +39,7 @@ export default {
}
}
this
.
$u
.
api
.
loginWechatAuth
(
data
).
then
((
res
)
=>
{
this
.
$u
.
api
.
loginWechatAuth
(
data
).
then
((
res
)
=>
{
this
.
$u
.
vuex
(
'vuex_token'
,
res
.
token
)
this
.
$u
.
vuex
(
'vuex_token'
,
res
.
token
)
this
.
$u
.
vuex
(
'openId'
,
res
.
openId
)
this
.
$u
.
vuex
(
'userInfo'
,
userInfo
)
this
.
$u
.
vuex
(
'userInfo'
,
userInfo
)
this
.
$u
.
route
({
this
.
$u
.
route
({
type
:
'back'
,
type
:
'back'
,
...
...
src/store/index.js
View file @
c8c06aa3
...
@@ -12,7 +12,7 @@ try{
...
@@ -12,7 +12,7 @@ try{
}
}
// 需要永久存储,且下次APP启动需要取出的,在state中的变量名
// 需要永久存储,且下次APP启动需要取出的,在state中的变量名
let
saveStateKeys
=
[
'userInfo'
,
'vuex_token'
];
let
saveStateKeys
=
[
'userInfo'
,
'vuex_token'
,
'openId'
];
// 保存变量到本地存储中
// 保存变量到本地存储中
const
saveLifeData
=
function
(
key
,
value
){
const
saveLifeData
=
function
(
key
,
value
){
...
@@ -34,6 +34,7 @@ const store = new Vuex.Store({
...
@@ -34,6 +34,7 @@ const store = new Vuex.Store({
// 加上vuex_前缀,是防止变量名冲突,也让人一目了然
// 加上vuex_前缀,是防止变量名冲突,也让人一目了然
userInfo
:
lifeData
.
userInfo
?
lifeData
.
userInfo
:
{},
userInfo
:
lifeData
.
userInfo
?
lifeData
.
userInfo
:
{},
vuex_token
:
lifeData
.
vuex_token
?
lifeData
.
vuex_token
:
''
,
vuex_token
:
lifeData
.
vuex_token
?
lifeData
.
vuex_token
:
''
,
openId
:
lifeData
.
openId
?
lifeData
.
openId
:
''
,
// 如果vuex_version无需保存到本地永久存储,无需lifeData.vuex_version方式
// 如果vuex_version无需保存到本地永久存储,无需lifeData.vuex_version方式
vuex_version
:
'1.0.1'
,
vuex_version
:
'1.0.1'
,
},
},
...
...
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