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
021ae594
Commit
021ae594
authored
Jul 25, 2023
by
wangp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
lakala
parent
1f52298a
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
118 additions
and
222 deletions
+118
-222
notice.go
repository/pay/notice.go
+32
-0
pay.go
repository/pay/pay.go
+86
-222
No files found.
repository/pay/notice.go
View file @
021ae594
...
...
@@ -177,3 +177,35 @@ func InsertPayBillDetailNoticeResponseBody(tx *sql.Tx, billID int64, noticeRespo
return
nil
}
// BillPayStateSuccess is 微信回调后 把订单状态 置为结算成功
func
BillPayStateSuccess
(
tx
*
sql
.
Tx
,
billID
int64
)
error
{
insertPayBillDetailSQL
:=
`update system_pay_bill set result_code = 1 where id = ?`
result
,
err
:=
tx
.
Exec
(
insertPayBillDetailSQL
,
billID
)
if
err
!=
nil
{
return
err
}
_
,
err
=
result
.
RowsAffected
()
if
err
!=
nil
{
return
err
}
return
nil
}
// BillPayStateFail is 微信回调后 把订单状态 置为结算失败
//func BillPayStateFail(tx *sql.Tx, billID int64) error {
//
// insertPayBillDetailSQL := `update system_pay_bill set result_code = 2 where id = ?`
// result, err := tx.Exec(insertPayBillDetailSQL, billID)
// if err != nil {
// return err
// }
//
// _, err = result.RowsAffected()
// if err != nil {
// return err
// }
// return nil
//}
repository/pay/pay.go
View file @
021ae594
...
...
@@ -38,8 +38,6 @@ func UnifiedOrder(input *models.PlaceAnOrderParamInput, ip string) (interface{},
orderID
:=
GetUID
()
//beego.Info("AttachInfo: ", input.AttachInfo)
attachMap
:=
make
(
map
[
string
]
interface
{},
0
)
attachMap
[
"store_sn"
]
=
input
.
StoreSn
attachMap
[
"old_attach"
]
=
input
.
AttachInfo
...
...
@@ -99,27 +97,15 @@ func UnifiedOrder(input *models.PlaceAnOrderParamInput, ip string) (interface{},
// 构造回调url
input
.
NoticeURL
=
GetNoticeURL
(
input
.
SourceCode
)
// 传递给支付渠道的
//p.ServeNoticeUrl = noticeURLx
data2
:=
make
(
map
[
string
]
interface
{})
//data2["merchant_no"] = "8221210701101SB"
//data2["merchant_no"] = "8222900581201QB"
if
input
.
SourceCode
==
4
||
input
.
SourceCode
==
6
{
data2
[
"merchant_no"
]
=
merchant_no1
//微信H5、支付宝H5
}
else
{
data2
[
"merchant_no"
]
=
merchant_no2
//微信扫码、支付宝扫码
}
//data2["term_no"] = "29034705" //不需要传?
//data2["total_amount"] = "1"
data2
[
"total_amount"
]
=
input
.
GoodsPrice
*
100
//data2["out_trade_no"] = orderID //随机生成的订单号 //商户交易流水号
//data2["out_trade_no"] = RandomString(32)
data2
[
"out_order_no"
]
=
orderID
//随机生成的订单号 //商户订单号
//data2["out_order_no"] = RandomString(32)
//data2["out_trade_no"] = input.AttachInfo
//data2["out_order_no"] = input.AttachInfo
if
input
.
SourceCode
==
15
{
//快捷支付
...
...
@@ -151,16 +137,10 @@ func UnifiedOrder(input *models.PlaceAnOrderParamInput, ip string) (interface{},
// 构造回调url
input
.
NoticeURL
=
GetNoticeURL
(
input
.
SourceCode
)
// 传递给支付渠道的
//p.ServeNoticeUrl = noticeURL
data2
:=
make
(
map
[
string
]
interface
{})
//data2["merchant_no"] = "8222900701107M5"
//data2["term_no"] = "A1062976"
//data2["merchant_no"] = "8221210701101SB"
data2
[
"merchant_no"
]
=
merchant_no3
data2
[
"term_no"
]
=
term_no3
//tempMoney, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", p.GoodsPrice*100), 64)
data2
[
"total_amount"
]
=
input
.
GoodsPrice
*
100
data2
[
"out_trade_no"
]
=
orderID
//随机生成的订单号 //商户交易流水号
...
...
@@ -171,7 +151,6 @@ func UnifiedOrder(input *models.PlaceAnOrderParamInput, ip string) (interface{},
//data2["goods_mark"] = input.AttachInfo //商品信息标识 (1:含商品信息,不填默认不含商品信息)
//微信JSAPI、微信小程序
//data2["counter_param"] = "{\"pay_mode\":\"WECHAT\"}"
data2
[
"account_type"
]
=
"WECHAT"
//钱包类型
if
input
.
SourceCode
==
2
{
data2
[
"trans_type"
]
=
"71"
//接入方式:微信小程序
...
...
@@ -187,8 +166,6 @@ func UnifiedOrder(input *models.PlaceAnOrderParamInput, ip string) (interface{},
//地址位置信息
data4
:=
make
(
map
[
string
]
interface
{})
//data4["open_id"] = input.OpenID //此参数 支付类型是 JS API 的时候 必传
data4
[
"sub_appid"
]
=
input
.
AppID
//子商户公众账号ID
data4
[
"user_id"
]
=
input
.
OpenID
//用户标识
...
...
@@ -210,10 +187,7 @@ func UnifiedOrder(input *models.PlaceAnOrderParamInput, ip string) (interface{},
data2
:=
make
(
map
[
string
]
interface
{})
data2
[
"merchant_no"
]
=
merchant_no4
data2
[
"term_no"
]
=
term_no4
//data2["merchant_no"] = "8222900581201QB"
//data2["term_no"] = "D0027598"
data2
[
"out_trade_no"
]
=
orderID
//随机生成的订单号 //商户交易流水号
//data2["out_trade_no"] = RandomString(32)
//扫码支付授权码,设备读取用户APP中的条码或者二维码信息,用户付款码条形码规则见说明
//data2["auth_code"] = "135178236713755038"
data2
[
"auth_code"
]
=
input
.
DynamicID
...
...
@@ -365,20 +339,6 @@ func getAuthorization(platform_type uint8, body string) (string, error) {
message
:=
appid
+
"
\n
"
+
mchSerialNo
+
"
\n
"
+
timestamp
+
"
\n
"
+
nonceStr
+
"
\n
"
+
body
+
"
\n
"
;
//测试
//privateRaw := "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDvDBZyHUDndAGx\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"
//线上
//privateRaw := "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCrBLPTvXAWDc4I\nM3Loqc267lycWpFNkL3fW6yCNPtZ0TwNx/0bGyVXxegmSIEPJ8smBeJJdvVw5AN9\nTaFf7L8gV5n2PG+1IGxkou18dQJ+jw0X0ezt6AMWFIM+L5eWMnFx7MaSeuq3TwEi\nnEeT5toCGrgu3cDouOB3GGc1hpMXmLL5lkkWrZpVff2uRqWAyqCidrNXU9ghLo7G\naryA0PnSy+R9gQfWC3WuHzmdo7jsS7Xts+VM97yL4P8v+JWYErW++rXkw9e4HNes\nvQieC30S3WclzaJlCp5PhX6oq7gTZYVe2RVTtfuvg+OxZ4mCx59cmLZV8MELi/Pi\ncdELpABVAgMBAAECggEAAQExEUBepTKFkFTFCwrcU4nM73o0ulDsXKCMPeOTym5J\nPQd8vCkHqiFWgMsSPwWL0vhb4PSa8oPUZWsMVKTuZoE9PU4TlevP1zOB06ZYUmgC\nuq4YBznCsuGB996NtGstcW7jp76jHFqRdiOW5A6KH1MK2/Ofi35yiyCQkqbsvEm9\n3+oNwcbLSexDiU45tiwRDy7m2siikZpaxb4SV5JMtO27zXKFQGlVAtb52kHTMwvT\nNqrg2wIohhs2pHbImJMhDrVukFuW3UL1F2CIbpgZG36Lpy3oxCHtCNm6mggpy4Pe\n+rgPW3ZPGoTZaiaqbEeem+hG/w9UylKZZV2B+AhFQQKBgQDwnx9eDUryMi58a5AG\nkA5vwtCqYaX4veIjTFm5b70n0vw0h11Sn/YPryx8jc0bb+acekNTUmXjbRZzpGmn\nMFiP77v+zxfakqwSEEDgsJBHU+HZ3m6p/ejEMX/mQOdDUrwqm6Y7UmMMDsz4b9BZ\n7o0etiHgPKPvni6+D3LWImDwxQKBgQC18shCQYnYM5EHMunPN12dwcCbdFsvr9Eo\nQPxXwDGOsGQliOAVrA3NnIvg0DgOnEuov9ieBd1L+mT6I4uRE3aRowislecFOYHT\nWj3HbXYWw94yXZrZyb9UnS6FSAG+xjP/RiooHs2Sprrz5nDnIylJxnTn0+3U+2a0\n2bWddhGqUQKBgD0Ow7DkAp6OqUkdKkDgESm+76AsgycpV9bJKwNpHUCbwy+5Ia8z\ntAaq1skMWn2Z2ZTfWXItOHmLVuUlVUH9fJuZo8S23EC0c0FqKmxZoWLYIDlevgoY\nyhXu0Zul4Iku11ygfoATGdsXbl+kT+RiKiEe6l2yRY8qPoYv+V3o/1xZAoGATbxM\nkwItQpHFhK3b9wxQkvYUtFYiH12envQk29jhU3VJVEAGfTvlKdOYb5SGXreoG5Db\nm6glxDBWtAg7uN/36IEfU5039qN7NDF585pwuYk1hY84eZQYiq4dEhSRqlBEJuxz\nVnDSo7VYapwp4JbFLR/9Eo8ZLcW7O8lILt4i7gECgYAubzT3SDYf5BlxQzzdVHhd\nXY43f6SHCOsdE/7voyJCiQKwcJefkYJD/puvf1bHsfb5gsH4nyou0djKt4SM1SpE\nSVdmIKIjKGFNiqFSbCEKI6s6UTfa4bIhx8ZbqjM6YWVmZFGzF00CP8qYZJgpA4Rr\nX593bU9XLvgypO98+uFcDA=="
//signature, err := Sha256WithRsa(privateRaw, message)
//if err != nil {
// return signature, err
//}
//fmt.Println(777)
//fmt.Println(signature)
//fmt.Println("签名1:", signature)
var
path_private_key
string
//私钥文件地址
//平台类型 1:saas 2:shop 3:shop mobile 4:收银台 6:bk_shop 7:bk_shop_mobile
if
platform_type
==
2
||
platform_type
==
3
{
...
...
@@ -408,132 +368,65 @@ func getAuthorization(platform_type uint8, body string) (string, error) {
return
authorization
,
nil
}
//func Sha256WithRsa(privateRaw string, msg string) (string, error) {
// privateRaw = strings.Trim(privateRaw, "\n")
// 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(privateRaw)
// blockPri, _ := pem.Decode([]byte(privateRaw))
// if blockPri == nil {
// return "", fmt.Errorf("blockPri is nil")
// }
//
// rsaPri, e := genPriKey(blockPri.Bytes, PKCS8)
// if e != nil {
// panic(e)
// }
//
// h := sha256.New()
// h.Write([]byte(msg))
// d := h.Sum(nil)
//
// signature, err := rsa.SignPKCS1v15(rand.Reader, rsaPri, crypto.SHA256, d)
// if err != nil {
// //return "", errorx.Wrap(err)
// return "", err
// }
// encodedSig := base64.StdEncoding.EncodeToString(signature)
// return encodedSig, nil
//}
//const (
// PKCS1 int64 = iota
// PKCS8
//)
//
//func genPriKey(privateKey []byte, privateKeyType int64) (*rsa.PrivateKey, error) {
// var priKey *rsa.PrivateKey
// var err error
// switch privateKeyType {
// case PKCS1:
// {
// priKey, err = x509.ParsePKCS1PrivateKey([]byte(privateKey))
// if err != nil {
// return nil, err
// }
// }
// case PKCS8:
// {
// prkI, err := x509.ParsePKCS8PrivateKey([]byte(privateKey))
// if err != nil {
// return nil, err
// }
// priKey = prkI.(*rsa.PrivateKey)
// }
// default:
// {
// return nil, fmt.Errorf("unsupport private key type")
// }
// }
// return priKey, nil
//}
// GetNoticeURL is 获取回调地址
func
GetNoticeURL
(
sourceCode
uint8
)
string
{
domainName
:=
setting
.
Conf
.
PayUrl
.
DomainName
return
domainName
+
"/api/v1/pay/wx_notice"
//目前微信、支付宝调同一个地址
//生产随机字符串
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
)
}
// BillPayStateSuccess is 微信回调后 把订单状态 置为结算成功
func
BillPayStateSuccess
(
tx
*
sql
.
Tx
,
billID
int64
)
error
{
insertPayBillDetailSQL
:=
`update system_pay_bill set result_code = 1 where id = ?`
result
,
err
:=
tx
.
Exec
(
insertPayBillDetailSQL
,
billID
)
// 私钥签名过程
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
return
""
,
err
}
_
,
err
=
result
.
RowsAffected
(
)
// 3、RSA数字签名(参数是随机数、私钥对象、哈希类型、签名文件的哈希串),生成base64编码的签名字符串
bytes
,
err
:=
rsa
.
SignPKCS1v15
(
rand
.
Reader
,
privateKey
,
myhash
,
hashed
)
if
err
!=
nil
{
return
err
return
""
,
err
}
return
nil
return
base64
.
StdEncoding
.
EncodeToString
(
bytes
),
nil
}
// BillPayStateFail is 微信回调后 把订单状态 置为结算失败
func
BillPayStateFail
(
tx
*
sql
.
Tx
,
billID
int64
)
error
{
insertPayBillDetailSQL
:=
`update system_pay_bill set result_code = 2 where id = ?`
result
,
err
:=
tx
.
Exec
(
insertPayBillDetailSQL
,
billID
)
// 读取私钥文件,解析出私钥对象
func
ReadParsePrivaterKey
(
filename
string
)
(
*
rsa
.
PrivateKey
,
error
)
{
// 1、读取私钥文件,获取私钥字节
privateKeyBytes
,
err
:=
ioutil
.
ReadFile
(
filename
)
if
err
!=
nil
{
return
err
return
nil
,
err
}
_
,
err
=
result
.
RowsAffected
()
// 2、对私钥文件进行编码,生成加密块对象
block
,
_
:=
pem
.
Decode
(
privateKeyBytes
)
fmt
.
Println
(
block
.
Type
)
if
block
==
nil
{
return
nil
,
errors
.
New
(
"私钥信息错误!"
)
}
// 3、解析DER编码的私钥,生成私钥对象
prkI
,
err
:=
x509
.
ParsePKCS8PrivateKey
(
block
.
Bytes
)
if
err
!=
nil
{
return
err
return
nil
,
err
}
return
nil
}
//InsertRefundBill is 插入 支付订单表中
func
InsertRefundBill
(
tx
*
sql
.
Tx
,
p
*
models
.
RefundParamInput
,
refundID
string
)
(
int64
,
error
)
{
var
billID
int64
//todo
//insertSQL := `insert system_pay_bill set platform_type = ?, source_code = ?,
//payment_order_code = ?, paymoney = ?*1000, pay_type = 4, attach = ?, _type = 1, original_payment_order_code = ?`
//platformType, sourceCode, checkSn, refundAmount, attach, orderID
//result, err := tx.Exec(insertSQL, p.PlatformType, p.PlatformInfo, p.SourceCode,
// orderID, p.GoodsPrice, p.GoodsDes, p.GoodsDetail, p.AttachInfo, p.NoticeURL, p.PayType, p.IsServe)
privateKey
:=
prkI
.
(
*
rsa
.
PrivateKey
)
insertSQL
:=
`insert system_pay_bill set original_payment_order_code=?, payment_order_code=?, paymoney=?*1000, pay_type=4, _type=1`
return
privateKey
,
nil
}
//platformType, sourceCode, checkSn, refundAmount, attach, orderID
result
,
err
:=
tx
.
Exec
(
insertSQL
,
p
.
RefundNo
,
refundID
,
p
.
RefundAmount
)
if
err
!=
nil
{
return
billID
,
err
}
// GetNoticeURL is 获取回调地址
func
GetNoticeURL
(
sourceCode
uint8
)
string
{
billID
,
err
=
result
.
LastInsertId
()
if
err
!=
nil
{
return
billID
,
err
}
return
billID
,
nil
domainName
:=
setting
.
Conf
.
PayUrl
.
DomainName
return
domainName
+
"/api/v1/pay/wx_notice"
//目前微信、支付宝调同一个地址
}
//InsertPayBill is 插入 支付订单表中
...
...
@@ -598,23 +491,22 @@ func InsertPayBillDetailResponseBody(tx *sql.Tx, billID int64, responseBody inte
return
nil
}
func
InsertPayBillDetailResponseBodyString
(
tx
*
sql
.
Tx
,
billID
int64
,
responseBody
string
)
error
{
insertPayBillDetailSQL
:=
`update system_pay_bill_detail set response_body = ? where pay_bill_id = ?`
result
,
err
:=
tx
.
Exec
(
insertPayBillDetailSQL
,
responseBody
,
billID
)
if
err
!=
nil
{
return
err
}
_
,
err
=
result
.
RowsAffected
()
if
err
!=
nil
{
return
err
}
return
nil
}
//
func InsertPayBillDetailResponseBodyString(tx *sql.Tx, billID int64, responseBody string) error {
//
//
insertPayBillDetailSQL := `update system_pay_bill_detail set response_body = ? where pay_bill_id = ?`
//
result, err := tx.Exec(insertPayBillDetailSQL, responseBody, billID)
//
if err != nil {
//
return err
//
}
//
//
_, err = result.RowsAffected()
//
if err != nil {
//
return err
//
}
//
return nil
//
}
func
GetUID
()
string
{
u4
:=
uID
.
NewV4
()
//if err != nil {
// return ""
...
...
@@ -624,9 +516,10 @@ func GetUID() string {
return
strings
.
Replace
(
id
,
"-"
,
""
,
-
1
)
}
// 拉卡拉退款
func
UnifiedRefund
(
input
*
models
.
RefundParamInput
,
ip
string
)
(
interface
{},
error
)
{
fmt
.
Println
(
"谛宝多多输入参数(退款)"
)
fmt
.
Println
(
input
)
...
...
@@ -645,8 +538,8 @@ func UnifiedRefund(input *models.RefundParamInput, ip string) (interface{}, erro
defer
mysql
.
CloseTx
(
tx
,
err
)
//订单存在check
log_no
,
trans_term_no
,
source_code
,
err
:=
select
Pay
Bill
(
tx
,
input
)
//
退款
订单存在check
log_no
,
trans_term_no
,
source_code
,
err
:=
select
Refund
Bill
(
tx
,
input
)
if
err
!=
nil
{
return
nil
,
err
}
...
...
@@ -777,7 +670,8 @@ func UnifiedRefund(input *models.RefundParamInput, ip string) (interface{}, erro
return
response
,
nil
}
func
selectPayBill
(
tx
*
sql
.
Tx
,
input
*
models
.
RefundParamInput
)
(
string
,
string
,
uint8
,
error
)
{
//退款订单存在check
func
selectRefundBill
(
tx
*
sql
.
Tx
,
input
*
models
.
RefundParamInput
)
(
string
,
string
,
uint8
,
error
)
{
var
billID
int64
var
status
uint
...
...
@@ -786,11 +680,11 @@ func selectPayBill(tx *sql.Tx, input *models.RefundParamInput) (string, string,
var
notice_request2
[]
byte
//payment_order_code, paymoney
select
PayBillDetai
lSQL
:=
`select b.id, b.result_code, b.source_code, bd.notice_request_body
select
RefundBil
lSQL
:=
`select b.id, b.result_code, b.source_code, bd.notice_request_body
from system_pay_bill b
left join system_pay_bill_detail bd on b.id=bd.pay_bill_id
where b._type=0 and b.payment_order_code=?`
err
:=
tx
.
QueryRow
(
select
PayBillDetai
lSQL
,
input
.
RefundNo
)
.
Scan
(
&
billID
,
&
status
,
&
source_code
,
&
notice_request2
)
err
:=
tx
.
QueryRow
(
select
RefundBil
lSQL
,
input
.
RefundNo
)
.
Scan
(
&
billID
,
&
status
,
&
source_code
,
&
notice_request2
)
if
err
!=
nil
{
return
""
,
""
,
0
,
err
}
...
...
@@ -829,60 +723,30 @@ func selectPayBill(tx *sql.Tx, input *models.RefundParamInput) (string, string,
return
log_no
,
notice_request
.
TransTermNo
,
source_code
,
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
)
}
//InsertRefundBill is 插入 支付订单表中
func
InsertRefundBill
(
tx
*
sql
.
Tx
,
p
*
models
.
RefundParamInput
,
refundID
string
)
(
int64
,
error
)
{
// 私钥签名过程
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
)
if
err
!=
nil
{
return
""
,
err
}
return
base64
.
StdEncoding
.
EncodeToString
(
bytes
),
nil
}
var
billID
int64
//todo 原source
//insertSQL := `insert system_pay_bill set platform_type = ?, source_code = ?,
//payment_order_code = ?, paymoney = ?*1000, pay_type = 4, attach = ?, _type = 1, original_payment_order_code = ?`
// 读取私钥文件,解析出私钥对象
func
ReadParsePrivaterKey
(
filename
string
)
(
*
rsa
.
PrivateKey
,
error
)
{
// 1、读取私钥文件,获取私钥字节
privateKeyBytes
,
err
:=
ioutil
.
ReadFile
(
filename
)
//platformType, sourceCode, checkSn, refundAmount, attach, orderID
//result, err := tx.Exec(insertSQL, p.PlatformType, p.PlatformInfo, p.SourceCode,
// orderID, p.GoodsPrice, p.GoodsDes, p.GoodsDetail, p.AttachInfo, p.NoticeURL, p.PayType, p.IsServe)
insertSQL
:=
`insert system_pay_bill set original_payment_order_code=?, payment_order_code=?, paymoney=?*1000, _type=1`
//差 platformType, sourceCode, attach 和 pay_type = 4
result
,
err
:=
tx
.
Exec
(
insertSQL
,
p
.
RefundNo
,
refundID
,
p
.
RefundAmount
)
if
err
!=
nil
{
return
nil
,
err
}
// 2、对私钥文件进行编码,生成加密块对象
block
,
_
:=
pem
.
Decode
(
privateKeyBytes
)
fmt
.
Println
(
block
.
Type
)
if
block
==
nil
{
return
nil
,
errors
.
New
(
"私钥信息错误!"
)
return
billID
,
err
}
// 3、解析DER编码的私钥,生成私钥对象
//privateKey, err := x509.ParsePKCS1PrivateKey(block.Bytes)
//if err != nil {
// return nil, err
//}
prkI
,
err
:=
x509
.
ParsePKCS8PrivateKey
(
block
.
Bytes
)
billID
,
err
=
result
.
LastInsertId
()
if
err
!=
nil
{
return
nil
,
err
return
billID
,
err
}
privateKey
:=
prkI
.
(
*
rsa
.
PrivateKey
)
return
privateKey
,
nil
}
\ No newline at end of file
return
billID
,
nil
}
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