Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
system_pay
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
王沛
system_pay
Commits
d115f679
Commit
d115f679
authored
Jun 28, 2023
by
wangp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
lakala
parent
3f227fc3
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
211 additions
and
24 deletions
+211
-24
OP00000003_cert.cer
cert/OP00000003_cert.cer
+21
-0
OP00000003_private_key.pem
cert/OP00000003_private_key.pem
+28
-0
pay.go
repository/pay/pay.go
+34
-24
cert.go
utils/cert.go
+128
-0
No files found.
cert/OP00000003_cert.cer
0 → 100755
View file @
d115f679
-----BEGIN CERTIFICATE-----
MIIDYTCCAkmgAwIBAgIJAN+6gZTEG4TPMA0GCSqGSIb3DQEBCwUAMEkxCzAJBgNV
BAYTAlVTMREwDwYDVQQIEwhzaGFuZ2hhaTERMA8GA1UEBxMIc2hhbmdoYWkxFDAS
BgNVBAMUC2xha2FsYV8yMDIxMB4XDTIxMDYxODA3MjEzNFoXDTMxMDYxOTA3MjEz
NFowSTELMAkGA1UEBhMCVVMxETAPBgNVBAgTCHNoYW5naGFpMREwDwYDVQQHEwhz
aGFuZ2hhaTEUMBIGA1UEAxQLbGFrYWxhXzIwMjEwggEiMA0GCSqGSIb3DQEBAQUA
A4IBDwAwggEKAoIBAQDvDBZyHUDndAGxrIcsCV2njhNO3vCEZotTaWYSYwtDvkcA
b1EjsBFabXZaKigpqFXk5XXNI3NIHP9M8XKzIgGvc65NpLAfRjVql8JiTvLyYd1g
IUcOXMInabu+oX7dQSI1mS8XzqaoVRhDZQWhXcJW9bxMulgnzvk0Ggw07AjGF7si
+hP/Va8SJmN7EJwfQq6TpSxR+WdIHpbWdhZ+NHwitnQwAJTLBFvfk28INM39G7XO
sXdVLfsooFdglVTOHpNuRiQAj9gShCCNrpGsNQxDiJIxE43qRsNsRwigyo6DPJk/
klgDJa417E2wgP8VrwiXparO4FMzOGK15quuoD7DAgMBAAGjTDBKMAkGA1UdEwQC
MAAwEQYJYIZIAYb4QgEBBAQDAgTwMAsGA1UdDwQEAwIFoDAdBgNVHSUEFjAUBggr
BgEFBQcDAgYIKwYBBQUHAwEwDQYJKoZIhvcNAQELBQADggEBAI21YYAlH+Pc1ISv
nbQrGqL8suGL0Hh/8hGaFfrJEJEKr9OeC8jElUhck2MTmfu/Y1lB7r8RBrhGPXi4
kTXmB6ADs/9+ezNW3WXyFj7fhs3JcZ3mo33T9wyQySDKd//JrEtrTsc/s2PZ602y
qNmPomXSzjrlugaMyC7LI9sR44mc7sQnchjHoxrQFD5/usTFW72UQfYCORsQWYMt
0KKEyAcpRL51RE3xbX1WDtduFYGP62PbwLAn2nCL/j1wlF5hltWj7sditWqKgso5
F8BTffn2Bb0RdsNxqwMy1cTPrWLeXVOqMDu3ge7hvoav8lZKTjk5Kmqhs7wNAQXK
mg9qSwo=
-----END CERTIFICATE-----
cert/OP00000003_private_key.pem
0 → 100755
View file @
d115f679
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDvDBZyHUDndAGx
rIcsCV2njhNO3vCEZotTaWYSYwtDvkcAb1EjsBFabXZaKigpqFXk5XXNI3NIHP9M
8XKzIgGvc65NpLAfRjVql8JiTvLyYd1gIUcOXMInabu+oX7dQSI1mS8XzqaoVRhD
ZQWhXcJW9bxMulgnzvk0Ggw07AjGF7si+hP/Va8SJmN7EJwfQq6TpSxR+WdIHpbW
dhZ+NHwitnQwAJTLBFvfk28INM39G7XOsXdVLfsooFdglVTOHpNuRiQAj9gShCCN
rpGsNQxDiJIxE43qRsNsRwigyo6DPJk/klgDJa417E2wgP8VrwiXparO4FMzOGK1
5quuoD7DAgMBAAECggEBANhmWOt1EAx3OBFf3f4/fEjylQgRSiqRqg8Ymw6KGuh4
mE4Md6eW/B6geUOmZjVP7nIIR1wte28M0REWgn8nid8LGf+v1sB5DmIwgAf+8G/7
qCwd8/VMg3aqgQtRp0ckb5OV2Mv0h2pbnltkWHR8LDIMwymyh5uCApbn/aTrCAZK
NXcPOyAn9tM8Bu3FHk3Pf24Er3SN+bnGxgpzDrFjsDSHjDFT9UMIc2WdA3tuMv9X
3DDn0bRCsHnsIw3WrwY6HQ8mumdbURk+2Ey3eRFfMYxyS96kOgBC2hqZOlDwVPAK
TPtS4hoq+cQ0sRaJQ4T0UALJrBVHa+EESgRaTvrXqAECgYEA+WKmy9hcvp6IWZlk
9Q1JZ+dgIVxrO65zylK2FnD1/vcTx2JMn73WKtQb6vdvTuk+Ruv9hY9PEsf7S8gH
STTmzHOUgo5x0F8yCxXFnfji2juoUnDdpkjtQK5KySDcpQb5kcCJWEVi9v+zObM0
Zr1Nu5/NreE8EqUl3+7MtHOu1TMCgYEA9WM9P6m4frHPW7h4gs/GISA9LuOdtjLv
AtgCK4cW2mhtGNAMttD8zOBQrRuafcbFAyU9de6nhGwetOhkW9YSV+xRNa7HWTeI
RgXJuJBrluq5e1QGTIwZU/GujpNaR4Qiu0B8TodM/FME7htsyxjmCwEfT6SDYlke
MzTbMa9Q0DECgYBqsR/2+dvD2YMwAgZFKKgNAdoIq8dcwyfamUQ5mZ5EtGQL2yw4
8zibHh/LiIxgUD1Kjk/qQgNsX45NP4iOc0mCkrgomtRqdy+rumbPTNmQ0BEVJCBP
scd+8pIgNiTvnWpMRvj7gMP0NDTzLI3wnnCRIq8WAtR2jZ0Ejt+ZHBziLQKBgQDi
bEe/zqNmhDuJrpXEXmO7fTv3YB/OVwEj5p1Z/LSho2nHU3Hn3r7lbLYEhUvwctCn
Ll2fzC7Wic1rsGOqOcWDS5NDrZpUQGGF+yE/JEOiZcPwgH+vcjaMtp0TAfRzuQEz
NzV8YGwxB4mtC7E/ViIuVULHAk4ZGZI8PbFkDxjKgQKBgG8jEuLTI1tsP3kyaF3j
Aylnw7SkBc4gfe9knsYlw44YlrDSKr8AOp/zSgwvMYvqT+fygaJ3yf9uIBdrIilq
CHKXccZ9uA/bT5JfIi6jbg3EoE9YhB0+1aGAS1O2dBvUiD8tJ+BjAT4OB0UDpmM6
QsFLQgFyXgvDnzr/o+hQJelW
-----END PRIVATE KEY-----
repository/pay/pay.go
View file @
d115f679
...
...
@@ -12,15 +12,13 @@ import (
"encoding/pem"
"errors"
"fmt"
"github.com/astaxie/beego"
"github.com/astaxie/beego/httplib"
uID
"github.com/satori/go.uuid"
rand2
"math/rand"
"strings"
"system_pay/models"
"system_pay/mysql"
"system_pay/setting"
"
time
"
"
system_pay/utils
"
)
// 拉卡拉支付
...
...
@@ -86,7 +84,6 @@ if false {
//data2["merchant_no"] = "8222900701107M5"
data2
[
"merchant_no"
]
=
"8221210701101SB"
data2
[
"term_no"
]
=
"29034705"
//data2["auth_code"] = "135178236713755038" //delete ?
//data2["total_amount"] = "1"
data2
[
"total_amount"
]
=
input
.
GoodsPrice
...
...
@@ -127,7 +124,6 @@ if false {
//data2["merchant_no"] = "8222900701107M5"
data2
[
"merchant_no"
]
=
"8221210701101SB"
data2
[
"term_no"
]
=
"29034705"
//data2["auth_code"] = "135178236713755038" //delete ?
//data2["total_amount"] = "1"
data2
[
"total_amount"
]
=
input
.
GoodsPrice
...
...
@@ -196,7 +192,7 @@ if false {
// 插入下单成功后返回的参数
err
=
InsertPayBillDetailResponseBody
(
tx
,
billID
,
lakala_rtn
)
if
err
!=
nil
{
beego
.
Error
(
"下单请求成功 --- 但插入成功后的参数失败"
)
//
beego.Error("下单请求成功 --- 但插入成功后的参数失败")
return
nil
,
err
}
...
...
@@ -274,6 +270,8 @@ func getAuthorization(body string) (string, error) {
//privateRaw := "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDvDBZyHUDndAGx\nrIcsCV2njhNO3vCEZotTaWYSYwtDvkcAb1EjsBFabXZaKigpqFXk5XXNI3NIHP9M\n8XKzIgGvc65NpLAfRjVql8JiTvLyYd1gIUcOXMInabu+oX7dQSI1mS8XzqaoVRhD\nZQWhXcJW9bxMulgnzvk0Ggw07AjGF7si+hP/Va8SJmN7EJwfQq6TpSxR+WdIHpbW\ndhZ+NHwitnQwAJTLBFvfk28INM39G7XOsXdVLfsooFdglVTOHpNuRiQAj9gShCCN\nrpGsNQxDiJIxE43qRsNsRwigyo6DPJk/klgDJa417E2wgP8VrwiXparO4FMzOGK1\n5quuoD7DAgMBAAECggEBANhmWOt1EAx3OBFf3f4/fEjylQgRSiqRqg8Ymw6KGuh4\nmE4Md6eW/B6geUOmZjVP7nIIR1wte28M0REWgn8nid8LGf+v1sB5DmIwgAf+8G/7\nqCwd8/VMg3aqgQtRp0ckb5OV2Mv0h2pbnltkWHR8LDIMwymyh5uCApbn/aTrCAZK\nNXcPOyAn9tM8Bu3FHk3Pf24Er3SN+bnGxgpzDrFjsDSHjDFT9UMIc2WdA3tuMv9X\n3DDn0bRCsHnsIw3WrwY6HQ8mumdbURk+2Ey3eRFfMYxyS96kOgBC2hqZOlDwVPAK\nTPtS4hoq+cQ0sRaJQ4T0UALJrBVHa+EESgRaTvrXqAECgYEA+WKmy9hcvp6IWZlk\n9Q1JZ+dgIVxrO65zylK2FnD1/vcTx2JMn73WKtQb6vdvTuk+Ruv9hY9PEsf7S8gH\nSTTmzHOUgo5x0F8yCxXFnfji2juoUnDdpkjtQK5KySDcpQb5kcCJWEVi9v+zObM0\nZr1Nu5/NreE8EqUl3+7MtHOu1TMCgYEA9WM9P6m4frHPW7h4gs/GISA9LuOdtjLv\nAtgCK4cW2mhtGNAMttD8zOBQrRuafcbFAyU9de6nhGwetOhkW9YSV+xRNa7HWTeI\nRgXJuJBrluq5e1QGTIwZU/GujpNaR4Qiu0B8TodM/FME7htsyxjmCwEfT6SDYlke\nMzTbMa9Q0DECgYBqsR/2+dvD2YMwAgZFKKgNAdoIq8dcwyfamUQ5mZ5EtGQL2yw4\n8zibHh/LiIxgUD1Kjk/qQgNsX45NP4iOc0mCkrgomtRqdy+rumbPTNmQ0BEVJCBP\nscd+8pIgNiTvnWpMRvj7gMP0NDTzLI3wnnCRIq8WAtR2jZ0Ejt+ZHBziLQKBgQDi\nbEe/zqNmhDuJrpXEXmO7fTv3YB/OVwEj5p1Z/LSho2nHU3Hn3r7lbLYEhUvwctCn\nLl2fzC7Wic1rsGOqOcWDS5NDrZpUQGGF+yE/JEOiZcPwgH+vcjaMtp0TAfRzuQEz\nNzV8YGwxB4mtC7E/ViIuVULHAk4ZGZI8PbFkDxjKgQKBgG8jEuLTI1tsP3kyaF3j\nAylnw7SkBc4gfe9knsYlw44YlrDSKr8AOp/zSgwvMYvqT+fygaJ3yf9uIBdrIilq\nCHKXccZ9uA/bT5JfIi6jbg3EoE9YhB0+1aGAS1O2dBvUiD8tJ+BjAT4OB0UDpmM6\nQsFLQgFyXgvDnzr/o+hQJelW\n-----END PRIVATE KEY-----";
privateRaw
:=
"MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDvDBZyHUDndAGx
\n
rIcsCV2njhNO3vCEZotTaWYSYwtDvkcAb1EjsBFabXZaKigpqFXk5XXNI3NIHP9M
\n
8XKzIgGvc65NpLAfRjVql8JiTvLyYd1gIUcOXMInabu+oX7dQSI1mS8XzqaoVRhD
\n
ZQWhXcJW9bxMulgnzvk0Ggw07AjGF7si+hP/Va8SJmN7EJwfQq6TpSxR+WdIHpbW
\n
dhZ+NHwitnQwAJTLBFvfk28INM39G7XOsXdVLfsooFdglVTOHpNuRiQAj9gShCCN
\n
rpGsNQxDiJIxE43qRsNsRwigyo6DPJk/klgDJa417E2wgP8VrwiXparO4FMzOGK1
\n
5quuoD7DAgMBAAECggEBANhmWOt1EAx3OBFf3f4/fEjylQgRSiqRqg8Ymw6KGuh4
\n
mE4Md6eW/B6geUOmZjVP7nIIR1wte28M0REWgn8nid8LGf+v1sB5DmIwgAf+8G/7
\n
qCwd8/VMg3aqgQtRp0ckb5OV2Mv0h2pbnltkWHR8LDIMwymyh5uCApbn/aTrCAZK
\n
NXcPOyAn9tM8Bu3FHk3Pf24Er3SN+bnGxgpzDrFjsDSHjDFT9UMIc2WdA3tuMv9X
\n
3DDn0bRCsHnsIw3WrwY6HQ8mumdbURk+2Ey3eRFfMYxyS96kOgBC2hqZOlDwVPAK
\n
TPtS4hoq+cQ0sRaJQ4T0UALJrBVHa+EESgRaTvrXqAECgYEA+WKmy9hcvp6IWZlk
\n
9Q1JZ+dgIVxrO65zylK2FnD1/vcTx2JMn73WKtQb6vdvTuk+Ruv9hY9PEsf7S8gH
\n
STTmzHOUgo5x0F8yCxXFnfji2juoUnDdpkjtQK5KySDcpQb5kcCJWEVi9v+zObM0
\n
Zr1Nu5/NreE8EqUl3+7MtHOu1TMCgYEA9WM9P6m4frHPW7h4gs/GISA9LuOdtjLv
\n
AtgCK4cW2mhtGNAMttD8zOBQrRuafcbFAyU9de6nhGwetOhkW9YSV+xRNa7HWTeI
\n
RgXJuJBrluq5e1QGTIwZU/GujpNaR4Qiu0B8TodM/FME7htsyxjmCwEfT6SDYlke
\n
MzTbMa9Q0DECgYBqsR/2+dvD2YMwAgZFKKgNAdoIq8dcwyfamUQ5mZ5EtGQL2yw4
\n
8zibHh/LiIxgUD1Kjk/qQgNsX45NP4iOc0mCkrgomtRqdy+rumbPTNmQ0BEVJCBP
\n
scd+8pIgNiTvnWpMRvj7gMP0NDTzLI3wnnCRIq8WAtR2jZ0Ejt+ZHBziLQKBgQDi
\n
bEe/zqNmhDuJrpXEXmO7fTv3YB/OVwEj5p1Z/LSho2nHU3Hn3r7lbLYEhUvwctCn
\n
Ll2fzC7Wic1rsGOqOcWDS5NDrZpUQGGF+yE/JEOiZcPwgH+vcjaMtp0TAfRzuQEz
\n
NzV8YGwxB4mtC7E/ViIuVULHAk4ZGZI8PbFkDxjKgQKBgG8jEuLTI1tsP3kyaF3j
\n
Aylnw7SkBc4gfe9knsYlw44YlrDSKr8AOp/zSgwvMYvqT+fygaJ3yf9uIBdrIilq
\n
CHKXccZ9uA/bT5JfIi6jbg3EoE9YhB0+1aGAS1O2dBvUiD8tJ+BjAT4OB0UDpmM6
\n
QsFLQgFyXgvDnzr/o+hQJelW"
//privateRaw := "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDvDBZyHUDndAGx\nrIcsCV2njhNO3vCEZotTaWYSYwtDvkcAb1EjsBFabXZaKigpqFXk5XXNI3NIHP9M\n8XKzIgGvc65NpLAfRjVql8JiTvLyYd1gIUcOXMInabu+oX7dQSI1mS8XzqaoVRhD\nZQWhXcJW9bxMulgnzvk0Ggw07AjGF7si+hP/Va8SJmN7EJwfQq6TpSxR+WdIHpbW\ndhZ+NHwitnQwAJTLBFvfk28INM39G7XOsXdVLfsooFdglVTOHpNuRiQAj9gShCCN\nrpGsNQxDiJIxE43qRsNsRwigyo6DPJk/klgDJa417E2wgP8VrwiXparO4FMzOGK1\n5quuoD7DAgMBAAECggEBANhmWOt1EAx3OBFf3f4/fEjylQgRSiqRqg8Ymw6KGuh4\nmE4Md6eW/B6geUOmZjVP7nIIR1wte28M0REWgn8nid8LGf+v1sB5DmIwgAf+8G/7\nqCwd8/VMg3aqgQtRp0ckb5OV2Mv0h2pbnltkWHR8LDIMwymyh5uCApbn/aTrCAZK\nNXcPOyAn9tM8Bu3FHk3Pf24Er3SN+bnGxgpzDrFjsDSHjDFT9UMIc2WdA3tuMv9X\n3DDn0bRCsHnsIw3WrwY6HQ8mumdbURk+2Ey3eRFfMYxyS96kOgBC2hqZOlDwVPAK\nTPtS4hoq+cQ0sRaJQ4T0UALJrBVHa+EESgRaTvrXqAECgYEA+WKmy9hcvp6IWZlk\n9Q1JZ+dgIVxrO65zylK2FnD1/vcTx2JMn73WKtQb6vdvTuk+Ruv9hY9PEsf7S8gH\nSTTmzHOUgo5x0F8yCxXFnfji2juoUnDdpkjtQK5KySDcpQb5kcCJWEVi9v+zObM0\nZr1Nu5/NreE8EqUl3+7MtHOu1TMCgYEA9WM9P6m4frHPW7h4gs/GISA9LuOdtjLv\nAtgCK4cW2mhtGNAMttD8zOBQrRuafcbFAyU9de6nhGwetOhkW9YSV+xRNa7HWTeI\nRgXJuJBrluq5e1QGTIwZU/GujpNaR4Qiu0B8TodM/FME7htsyxjmCwEfT6SDYlke\nMzTbMa9Q0DECgYBqsR/2+dvD2YMwAgZFKKgNAdoIq8dcwyfamUQ5mZ5EtGQL2yw4\n8zibHh/LiIxgUD1Kjk/qQgNsX45NP4iOc0mCkrgomtRqdy+rumbPTNmQ0BEVJCBP\nscd+8pIgNiTvnWpMRvj7gMP0NDTzLI3wnnCRIq8WAtR2jZ0Ejt+ZHBziLQKBgQDi\nbEe/zqNmhDuJrpXEXmO7fTv3YB/OVwEj5p1Z/LSho2nHU3Hn3r7lbLYEhUvwctCn\nLl2fzC7Wic1rsGOqOcWDS5NDrZpUQGGF+yE/JEOiZcPwgH+vcjaMtp0TAfRzuQEz\nNzV8YGwxB4mtC7E/ViIuVULHAk4ZGZI8PbFkDxjKgQKBgG8jEuLTI1tsP3kyaF3j\nAylnw7SkBc4gfe9knsYlw44YlrDSKr8AOp/zSgwvMYvqT+fygaJ3yf9uIBdrIilq\nCHKXccZ9uA/bT5JfIi6jbg3EoE9YhB0+1aGAS1O2dBvUiD8tJ+BjAT4OB0UDpmM6\nQsFLQgFyXgvDnzr/o+hQJelW\n-----END PRIVATE KEY-----"
signature
,
err
:=
Sha256WithRsa
(
privateRaw
,
message
)
if
err
!=
nil
{
return
signature
,
err
...
...
@@ -281,6 +279,24 @@ func getAuthorization(body string) (string, error) {
//fmt.Println(777)
//fmt.Println(signature)
fmt
.
Println
(
"签名1:"
,
signature
)
base64Sig
,
err
:=
utils
.
RSASign
([]
byte
(
message
),
"./cert/OP00000003_private_key.pem"
)
if
err
!=
nil
{
return
signature
,
err
}
fmt
.
Println
(
"签名2:"
,
base64Sig
)
err
=
utils
.
RSAVerify
([]
byte
(
message
),
base64Sig
,
"./cert/OP00000003_cert.cer"
)
if
err
==
nil
{
fmt
.
Println
(
"验证成功!"
)
}
else
{
fmt
.
Println
(
"验证失败!"
)
return
""
,
err
}
return
""
,
errors
.
New
(
"wangpei签名测试中。。。。。"
)
authorization
:=
"LKLAPI-SHA256withRSA "
+
"appid=
\"
"
+
appid
+
"
\"
,"
+
"serial_no=
\"
"
+
mchSerialNo
+
"
\"
,"
+
"timestamp=
\"
"
+
timestamp
+
"
\"
,"
+
"nonce_str=
\"
"
+
nonceStr
+
"
\"
,"
+
"signature=
\"
"
+
signature
+
"
\"
"
;
//System.out.println("authorization message :" + authorization);
...
...
@@ -292,9 +308,7 @@ func Sha256WithRsa(privateRaw string, msg string) (string, error) {
if
!
strings
.
HasPrefix
(
privateRaw
,
"-----BEGIN RSA PRIVATE KEY-----"
)
{
privateRaw
=
fmt
.
Sprintf
(
"%s
\n
%s
\n
%s"
,
"-----BEGIN RSA PRIVATE KEY-----"
,
privateRaw
,
"-----END RSA PRIVATE KEY-----"
)
}
//fmt.Println(888)
//fmt.Println(privateRaw)
fmt
.
Println
(
privateRaw
)
blockPri
,
_
:=
pem
.
Decode
([]
byte
(
privateRaw
))
if
blockPri
==
nil
{
return
""
,
fmt
.
Errorf
(
"blockPri is nil"
)
...
...
@@ -350,17 +364,6 @@ func genPriKey(privateKey []byte, privateKeyType int64) (*rsa.PrivateKey, error)
return
priKey
,
nil
}
//生产随机字符串
func
RandomString
(
n
int
)
string
{
var
letters
=
[]
byte
(
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
)
result
:=
make
([]
byte
,
n
)
rand2
.
Seed
(
time
.
Now
()
.
Unix
())
for
i
:=
range
result
{
result
[
i
]
=
letters
[
rand2
.
Intn
(
len
(
letters
))]
}
return
string
(
result
)
}
// GetNoticeURL is 获取回调地址
func
GetNoticeURL
(
sourceCode
uint8
)
string
{
...
...
@@ -400,7 +403,6 @@ func GetNoticeURL(sourceCode uint8) string {
//return domainName + "/v1/notice/serve_ali"
}
// BillPayStateSuccess is 微信回调后 把订单状态 置为结算成功
func
BillPayStateSuccess
(
tx
*
sql
.
Tx
,
billID
int64
)
error
{
...
...
@@ -433,8 +435,6 @@ func BillPayStateFail(tx *sql.Tx, billID int64) error {
return
nil
}
//InsertPayBill is 插入 支付订单表中
func
InsertPayBill
(
tx
*
sql
.
Tx
,
p
*
models
.
PlaceAnOrderParamInput
,
orderID
string
)
(
int64
,
error
)
{
...
...
@@ -523,7 +523,16 @@ func GetUID() string {
return
strings
.
Replace
(
id
,
"-"
,
""
,
-
1
)
}
//生产随机字符串
//func RandomString(n int) string {
// var letters = []byte("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz")
// result := make([]byte, n)
// rand2.Seed(time.Now().Unix())
// for i := range result {
// result[i] = letters[rand2.Intn(len(letters))]
// }
// return string(result)
//}
...
...
@@ -566,6 +575,7 @@ func UnifiedOrder2(input *models.PlaceAnOrderParamInput) (interface{}, error) {
data2
[
"term_no"
]
=
"29034705"
//data2["out_trade_no"] = "FD660E1FAA3A4470933CDEDAE1EC1D8E"
data2
[
"out_trade_no"
]
=
"FD660E1FAA3A4470933CDEDAE1EC1D8E"
//扫码支付授权码,设备读取用户APP中的条码或者二维码信息,用户付款码条形码规则见说明
data2
[
"auth_code"
]
=
"135178236713755038"
data2
[
"total_amount"
]
=
"123"
//data2["out_order_no"] = "08F4542EEC6A4497BC419161747A92FA"
...
...
utils/cert.go
0 → 100755
View file @
d115f679
package
utils
import
(
"crypto"
"crypto/rand"
"crypto/rsa"
"crypto/x509"
"encoding/base64"
"encoding/pem"
"errors"
"fmt"
"io/ioutil"
)
//func test() {
// str := "from A to B 500RMB"
// base64Sig, _ := RSASign([]byte(str), "../cert/OP00000003_private_key.pem")
// fmt.Println("签名后的信息:", base64Sig)
//
// err := RSAVerify([]byte(str), base64Sig, "../cert/OP00000003_cert.cert")
// if err == nil {
// fmt.Println("验证成功!")
// } else {
// fmt.Println("验证失败!")
// }
//}
// 私钥签名过程
func
RSASign
(
data
[]
byte
,
filename
string
)
(
string
,
error
)
{
// 1、选择hash算法,对需要签名的数据进行hash运算
myhash
:=
crypto
.
SHA256
hashInstance
:=
myhash
.
New
()
hashInstance
.
Write
(
data
)
hashed
:=
hashInstance
.
Sum
(
nil
)
// 2、读取私钥文件,解析出私钥对象
privateKey
,
err
:=
ReadParsePrivaterKey
(
filename
)
if
err
!=
nil
{
return
""
,
err
}
// 3、RSA数字签名(参数是随机数、私钥对象、哈希类型、签名文件的哈希串),生成base64编码的签名字符串
//bytes, err := rsa.SignPKCS1v15(rand.Reader, privateKey, myhash, hashed)
bytes
,
err
:=
rsa
.
SignPKCS1v15
(
rand
.
Reader
,
privateKey
,
myhash
,
hashed
)
if
err
!=
nil
{
return
""
,
err
}
return
base64
.
StdEncoding
.
EncodeToString
(
bytes
),
nil
}
// 公钥验证签名过程
func
RSAVerify
(
data
[]
byte
,
base64Sig
,
filename
string
)
error
{
// 1、对base64编码的签名内容进行解码,返回签名字节
bytes
,
err
:=
base64
.
StdEncoding
.
DecodeString
(
base64Sig
)
if
err
!=
nil
{
return
err
}
// 2、选择hash算法,对需要签名的数据进行hash运算
myhash
:=
crypto
.
SHA256
hashInstance
:=
myhash
.
New
()
hashInstance
.
Write
(
data
)
hashed
:=
hashInstance
.
Sum
(
nil
)
// 3、读取公钥文件,解析出公钥对象
publicKey
,
err
:=
ReadParsePublicKey
(
filename
)
if
err
!=
nil
{
return
err
}
// 4、RSA验证数字签名(参数是公钥对象、哈希类型、签名文件的哈希串、签名后的字节)
return
rsa
.
VerifyPKCS1v15
(
publicKey
,
myhash
,
hashed
,
bytes
)
}
// 读取公钥文件,解析出公钥对象
func
ReadParsePublicKey
(
filename
string
)
(
*
rsa
.
PublicKey
,
error
)
{
// 1、读取公钥文件,获取公钥字节
publicKeyBytes
,
err
:=
ioutil
.
ReadFile
(
filename
)
if
err
!=
nil
{
return
nil
,
err
}
// 2、解码公钥字节,生成加密块对象
block
,
_
:=
pem
.
Decode
(
publicKeyBytes
)
if
block
==
nil
{
return
nil
,
errors
.
New
(
"公钥信息错误!"
)
}
fmt
.
Println
(
block
.
Type
)
// 3、解析DER编码的公钥,生成公钥接口
publicKeyInterface
,
err
:=
x509
.
ParsePKIXPublicKey
(
block
.
Bytes
)
if
err
!=
nil
{
fmt
.
Println
(
222
)
return
nil
,
err
}
// 4、公钥接口转型成公钥对象
publicKey
:=
publicKeyInterface
.
(
*
rsa
.
PublicKey
)
//publicKey, err := x509.ParsePKCS1PublicKey(block.Bytes)
//if err != nil {
// fmt.Println(222)
// return nil, err
//}
return
publicKey
,
nil
}
// 读取私钥文件,解析出私钥对象
func
ReadParsePrivaterKey
(
filename
string
)
(
*
rsa
.
PrivateKey
,
error
)
{
// 1、读取私钥文件,获取私钥字节
privateKeyBytes
,
err
:=
ioutil
.
ReadFile
(
filename
)
if
err
!=
nil
{
return
nil
,
err
}
// 2、对私钥文件进行编码,生成加密块对象
block
,
_
:=
pem
.
Decode
(
privateKeyBytes
)
fmt
.
Println
(
block
.
Type
)
if
block
==
nil
{
return
nil
,
errors
.
New
(
"私钥信息错误!"
)
}
// 3、解析DER编码的私钥,生成私钥对象
//privateKey, err := x509.ParsePKCS1PrivateKey(block.Bytes)
//if err != nil {
// return nil, err
//}
prkI
,
err
:=
x509
.
ParsePKCS8PrivateKey
(
block
.
Bytes
)
if
err
!=
nil
{
return
nil
,
err
}
privateKey
:=
prkI
.
(
*
rsa
.
PrivateKey
)
return
privateKey
,
nil
}
\ No newline at end of file
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