1.根据财务要求配置不同门店的收款账户;

This commit is contained in:
chenlin 2024-08-21 14:13:54 +08:00
parent e45772ab7c
commit 8cda813a09
11 changed files with 133 additions and 36 deletions

View File

@ -87,8 +87,30 @@ const (
TimeFormat = "2006-01-02 15:04:05"
clientIp = "39.108.188.218" // 小程序服务器
clientIpDev = "112.33.14.191" // 移动云服务器
HmPayMerchantIdDeovo = "664403000021193"
HmPubKeyDeovo = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCDA4g8VFWIxEbOzxYC8ZIOgaOsLWK4Y5k9D8GwJ1Gige79LbTxbe3PH12KMc59DpCR1PnIDwlYWjIE7mZZAHgImXs0pSFihvlNS9srWk2uPlEXXQjjIZ3mnPoXtNhU0x5cYdkB8jtijcYMSGwKmdrIvpvPX3MrDKOX6dJ1T4ll+QIDAQAB"
// HmPayMerchantIdSwitch 任天堂项目-对私账户(密钥20240701203620)
HmPayMerchantIdSwitch = "664403000021193"
HmPubKeySwitch = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCDA4g8VFWIxEbOzxYC8ZIOgaOsLWK4Y5k9D8GwJ1Gige79LbTxbe3PH12KMc59DpCR1PnIDwlYWjIE7mZZAHgImXs0pSFihvlNS9srWk2uPlEXXQjjIZ3mnPoXtNhU0x5cYdkB8jtijcYMSGwKmdrIvpvPX3MrDKOX6dJ1T4ll+QIDAQAB"
HmPubKeySwitchFp = "./config/hm_pay/switch_private_key.pem"
TestHmPubKeySwitchFp = "/Users/max/Documents/code/deovo/mh_goadmin_server/config/hm_pay/switch_private_key.pem"
// HmPayMerchantIdSwitchPub 任天堂项目-对公账户(密钥20240819161949)
HmPayMerchantIdSwitchPub = "664403000021225"
HmPubKeySwitchPub = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCBsfp+BrCGD39noWjW4z0VvvsFCWzU8vhAWlwGo/dkPxgQLXBNaTApUpavbQ6m/S0x5hQjcKwQ3UrJLDV70SAqPuO3QP0iagMKo2M6ROCO69L06In4gbqTTtTOb/1xpkbsVHd/9Wy/fyxreg1LY+MLzysH+OHAjjjiAYVL4e765QIDAQAB"
HmPubKeySwitchPubFp = "./config/hm_pay/switch_pub_private_key.pem"
TestHmPubKeySwitchPubFp = "/Users/max/Documents/code/deovo/mh_goadmin_server/config/hm_pay/switch_pub_private_key.pem"
// HmPayMerchantIdJBL 哈曼项目-对私账户(密钥20240820145322)
HmPayMerchantIdJBL = "664403000021330"
HmPubKeyJBL = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCBhzboiNtCxDF3QXdPGx5aS2UjXSqq1p2JsIe+PhCWLdaNHoQxzTS0s41KuWbSDpSmtUhutBJZ1QBy+84iLmLKJ5E7UfUIGbrI309hJLQxQey655wWYBtkOVpq6aozjjnnjQjDbYG1WuFmLA03mzQ51VLr4555ioo70hredjLaVQIDAQAB"
HmPubKeyJBLFp = "./config/hm_pay/jbl_private_key.pem"
TestHmPubKeyJBLFp = "/Users/max/Documents/code/deovo/mh_goadmin_server/config/hm_pay/jbl_private_key.pem"
// HmPayMerchantIdJBLPub 哈曼项目-对公账户
HmPayMerchantIdJBLPub = "664403000021340"
HmPubKeyJBLPub = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDIjqYgPO1kj3NI0WEfOCnKYUHu4EkARnbiJ2FKosajpP8eceaL1u4JOelNG+RN7cldvmWEtefZCPNOHAHddQLfEnRZ3xyzdRdV0A3vXykyY6UMWgRlPnHOslAm8OUpOWubDzQTmfr88R38EUrHG4HYvRVmQb/s/LQjsuS863vSbwIDAQAB"
HmPubKeyJBLPubFp = "./config/hm_pay/jbl_pub_private_key.pem"
TestHmPubKeyJBLPubFp = "/Users/max/Documents/code/deovo/mh_goadmin_server/config/hm_pay/jbl_pub_private_key.pem"
)
const (
@ -698,10 +720,9 @@ type HmPayUnifiedOrderRsp struct {
Sign string `json:"sign"`
}
func ParsePrivateKeyDeovo() (*rsa.PrivateKey, error) {
//fp := "/Users/max/Documents/code/deovo/mh_goadmin_server/config/hm_pay/deovo_private_key.pem"
fp := "./config/hm_pay/deovo_private_key.pem"
privateKey, err := os.ReadFile(fp)
func ParsePrivateKeyDeovo(storeId uint32) (*rsa.PrivateKey, error) {
storeKey := getStoreKeyConfig(storeId)
privateKey, err := os.ReadFile(storeKey.FP)
if err != nil {
logger.Errorf("read file err:", err)
return nil, err
@ -722,12 +743,12 @@ func ParsePrivateKeyDeovo() (*rsa.PrivateKey, error) {
return priKey.(*rsa.PrivateKey), nil
}
func Sha1withRsaDeovo(signContent string) (string, error) {
func Sha1withRsaDeovo(storeId uint32, signContent string) (string, error) {
hash := crypto.SHA1
shaNew := hash.New()
shaNew.Write([]byte(signContent))
hashed := shaNew.Sum(nil)
priKey, err := ParsePrivateKeyDeovo()
priKey, err := ParsePrivateKeyDeovo(storeId)
if err != nil {
logger.Errorf("parse err:", err)
return "", err
@ -741,7 +762,7 @@ func Sha1withRsaDeovo(signContent string) (string, error) {
return b64.StdEncoding.EncodeToString(signature), nil
}
func GenHmPaySignDeovo(m map[string]string) (string, error) {
func GenHmPaySignDeovo(storeId uint32, m map[string]string) (string, error) {
delete(m, "sign")
var signData []string
for k, v := range m {
@ -765,7 +786,7 @@ func GenHmPaySignDeovo(m map[string]string) (string, error) {
//logger.Info("签字符串1:", logger.Field("signStr", signStr))
fmt.Println("签字符串1:", signStr)
signature, err := Sha1withRsaDeovo(signStr)
signature, err := Sha1withRsaDeovo(storeId, signStr)
if err != nil {
logger.Errorf("signature err:", err)
return "", err
@ -905,7 +926,7 @@ func HmPayUnifiedOrder(r HmJsPayUnifiedOrderReq) (HmPayUnifiedOrderRsp, error) {
return hmPayUnifiedOrderRsp, nil
}
func HmVerifySha1RsaDeovo(signContent, signBase string) error {
func HmVerifySha1RsaDeovo(storeId uint32, signContent, signBase string) error {
//fp := "/Users/li/mh/mh_server/pack/configs/hm_pay/public_key.pme"
//publicKeyString, err := ioutil.ReadFile(fp)
//if err != nil {
@ -913,7 +934,8 @@ func HmVerifySha1RsaDeovo(signContent, signBase string) error {
// return err
//}
block, _ := pem.Decode([]byte(FormatPrivateKey(HmPubKeyDeovo)))
storeKey := getStoreKeyConfig(storeId)
block, _ := pem.Decode([]byte(FormatPrivateKey(storeKey.PubKey)))
if block == nil {
fmt.Println("decode block is nil")
return errors.New("decode block is nil")
@ -1021,6 +1043,50 @@ func ToSignContent(s interface{}) (string, error) {
return signStr, nil
}
type StoreKeyConfig struct {
AppID string
FP string
PubKey string
}
func getStoreKeyConfig(storeId uint32) StoreKeyConfig {
var config StoreKeyConfig
switch storeId {
case 19, 23, 27, 28: // 汕头万象城, 海雅缤纷城, 布吉万象汇, 大运天地
config = StoreKeyConfig{
AppID: HmPayMerchantIdSwitchPub,
FP: HmPubKeySwitchPubFp,
PubKey: HmPubKeySwitchPub,
}
case 13: // 万象天地
config = StoreKeyConfig{
AppID: HmPayMerchantIdSwitch,
FP: HmPubKeySwitchFp,
PubKey: HmPubKeySwitch,
}
case 29: // JBL哈曼店
now := time.Now()
start := time.Date(now.Year(), now.Month(), now.Day(), 16, 30, 0, 0, now.Location())
end := time.Date(now.Year(), now.Month(), now.Day(), 23, 59, 59, 0, now.Location())
if now.After(start) && now.Before(end) {
config = StoreKeyConfig{
AppID: HmPayMerchantIdJBLPub,
FP: HmPubKeyJBLPubFp,
PubKey: HmPubKeyJBLPub,
}
} else {
config = StoreKeyConfig{
AppID: HmPayMerchantIdJBL,
FP: HmPubKeyJBLFp,
PubKey: HmPubKeyJBL,
}
}
}
return config
}
// HmJsPayBToCOrder 河马刷卡支付B扫C
func HmJsPayBToCOrder(storeId uint32, orderId string, totalFee float64, authCode, notifyUrl string) (*HmPayBToCOrderDetail, error) {
now := time.Now().Local()
@ -1033,9 +1099,11 @@ func HmJsPayBToCOrder(storeId uint32, orderId string, totalFee float64, authCode
// return nil, errors.New("NotifyUrl is null")
//}
storeKey := getStoreKeyConfig(storeId)
unifiedOrderReq := HmJsPayUnifiedOrderReq{}
publicPara := HmPayPublicPara{
AppId: HmPayMerchantIdDeovo,
AppId: storeKey.AppID,
//SubAppId: HmWxSubMerchantId,
Method: "trade.pay",
//Charset: "UTF-8",
@ -1080,7 +1148,7 @@ func HmJsPayBToCOrder(storeId uint32, orderId string, totalFee float64, authCode
return nil, err
}
sign, err := GenHmPaySignDeovo(m)
sign, err := GenHmPaySignDeovo(storeId, m)
if err != nil {
logger.Error("HmJsPayUnifiedOrder GenHmPaySign err:", logger.Field("err", err))
return nil, err
@ -1099,7 +1167,7 @@ func HmJsPayBToCOrder(storeId uint32, orderId string, totalFee float64, authCode
return nil, err
}
err = HmVerifySha1RsaDeovo(signContent, unifiedOrderResp.Sign)
err = HmVerifySha1RsaDeovo(storeId, signContent, unifiedOrderResp.Sign)
if err != nil {
logger.Errorf("HmVerifySha1Rsa err:", err)
return nil, err
@ -1118,13 +1186,14 @@ func HmJsPayBToCOrder(storeId uint32, orderId string, totalFee float64, authCode
}
// HmQueryOrder 订单查询
func HmQueryOrder(orderId string) (*HmPayTradeQueryResp, error) {
func HmQueryOrder(orderId string, storeId uint32) (*HmPayTradeQueryResp, error) {
now := time.Now().Local()
nonce := GenRandStr(NonceStringLength)
storeKey := getStoreKeyConfig(storeId)
unifiedOrderReq := HmJsPayUnifiedOrderReq{}
publicPara := HmPayPublicPara{
AppId: HmPayMerchantIdDeovo,
AppId: storeKey.AppID,
Method: "trade.query",
SignType: "RSA",
Sign: "",
@ -1149,7 +1218,7 @@ func HmQueryOrder(orderId string) (*HmPayTradeQueryResp, error) {
return nil, err
}
sign, err := GenHmPaySignDeovo(m)
sign, err := GenHmPaySignDeovo(storeId, m)
if err != nil {
logger.Error("HmJsPayUnifiedOrder GenHmPaySign err:", logger.Field("err", err))
return nil, err
@ -1167,7 +1236,7 @@ func HmQueryOrder(orderId string) (*HmPayTradeQueryResp, error) {
logger.Errorf("ToSignContent err:", err)
return nil, err
}
err = HmVerifySha1RsaDeovo(signContent, unifiedOrderResp.Sign)
err = HmVerifySha1RsaDeovo(storeId, signContent, unifiedOrderResp.Sign)
if err != nil {
logger.Errorf("HmVerifySha1Rsa err:", err)
return nil, err
@ -1187,13 +1256,13 @@ func HmQueryOrder(orderId string) (*HmPayTradeQueryResp, error) {
}
// HmCancelOrder 订单撤销
func HmCancelOrder(orderId string) (*HmPayTradeCancelResp, error) {
func HmCancelOrder(orderId string, storeId uint32) (*HmPayTradeCancelResp, error) {
now := time.Now().Local()
nonce := GenRandStr(NonceStringLength)
unifiedOrderReq := HmJsPayUnifiedOrderReq{}
publicPara := HmPayPublicPara{
AppId: HmPayMerchantIdDeovo,
AppId: HmPayMerchantIdSwitch,
Method: "trade.cancel",
SignType: "RSA",
Sign: "",
@ -1218,7 +1287,7 @@ func HmCancelOrder(orderId string) (*HmPayTradeCancelResp, error) {
return nil, err
}
sign, err := GenHmPaySignDeovo(m)
sign, err := GenHmPaySignDeovo(storeId, m)
if err != nil {
logger.Error("HmJsPayUnifiedOrder GenHmPaySign err:", logger.Field("err", err))
return nil, err
@ -1236,7 +1305,7 @@ func HmCancelOrder(orderId string) (*HmPayTradeCancelResp, error) {
logger.Errorf("ToSignContent err:", err)
return nil, err
}
err = HmVerifySha1RsaDeovo(signContent, unifiedOrderResp.Sign)
err = HmVerifySha1RsaDeovo(storeId, signContent, unifiedOrderResp.Sign)
if err != nil {
logger.Errorf("HmVerifySha1Rsa err:", err)
return nil, err

View File

@ -43,7 +43,7 @@ func TestHmJsPayBToCOrder(t *testing.T) {
func TestHmQueryOrder(t *testing.T) {
orderId := "sale2024070569804727"
order, err := HmQueryOrder(orderId)
order, err := HmQueryOrder(orderId, 13)
if err != nil {
fmt.Println("err:", err)
}
@ -55,7 +55,7 @@ func TestHmQueryOrder(t *testing.T) {
func TestHmCancelOrder(t *testing.T) {
orderId := "sale2023122225067733"
order, err := HmCancelOrder(orderId)
order, err := HmCancelOrder(orderId, 13)
if err != nil {
fmt.Println("err:", err)
}

View File

@ -2062,9 +2062,19 @@ func QueryErpOrderPayStatus(billSn string) (*ErpOrderPayResp, error) {
resp := &ErpOrderPayResp{
Status: Paying,
}
// 查询订单信息
var orderInfo ErpOrder
err := orm.Eloquent.Table("erp_order").Where("bill_sn = ?", billSn).Find(&orderInfo).Error
if err != nil {
logger.Error("未查询到订单:", logger.Field("err", err))
resp.Status = PayFailed
return resp, errors.New("未查询到待支付订单")
}
// 查询待支付订单
var orderRecordInfo ErpOrderRecord
err := orm.Eloquent.Table("erp_order_record").Where("bill_sn = ? and status in (?)", billSn, []string{Paying, PayOk}).
err = orm.Eloquent.Table("erp_order_record").Where("bill_sn = ? and status in (?)", billSn, []string{Paying, PayOk}).
Find(&orderRecordInfo).Error
if err != nil {
logger.Error("未查询到订单:", logger.Field("err", err))
@ -2085,7 +2095,7 @@ func QueryErpOrderPayStatus(billSn string) (*ErpOrderPayResp, error) {
}
// 查询支付状态
hmQueryResp, err := pay.HmQueryOrder(orderRecordInfo.OutOrderNo)
hmQueryResp, err := pay.HmQueryOrder(orderRecordInfo.OutOrderNo, orderInfo.StoreId)
if err != nil {
logger.Error("查询失败:", logger.Field("err", err))
return resp, err

View File

@ -0,0 +1,3 @@
-----BEGIN RSA PUBLIC KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCZqJtyqYd4HcYPNQnR2/IDDgcUFXjWs0kDMIre7AF6zNAcFD/vTOCcEzmb0scLhduoy6sEXj6lxdAuNYXKhVJIh2XRdORVMLqtdgeGN3W5rohQSC/8kWt6VmcXJZQw5YDdbSpacSa0djLxX8+lJuQwrkkNQKb41/uGifCwvnpF9sR8DqF9iDQn3LNoV2AkkCmXfXCPh2GJD1DOXes81dxzqWAc1kCSyGIPNgWgspV7rU4Zm5VpnomptxvMnIr3F+HXxM4zVk48JHwA6+FwQaw/G/XdqiZTwFtm65VbEEYrmsj8UYlxzeNOa6xv20AsmhwYJIMAi3Q+ziH1pVDGN1+3AgMBAAECggEAReUnSKIK6D2K4VH79IT68h7IY39c5zTIanYDRWHPTn+pzov7hSvQI86u7s2TEw/BmmeClEsWbiusBcj84eGBS1KjowJr9sBiuhKtW4UQvPTCNtqPUXEIla6F2EaUwSU0WASXNmqv83istZUii/pD5EzzF98n1JvSYyGN5afPUNE3liMI+xsM1WdVuzB+hewLBS/98cFBDcrHbakxjFiBYiyuo3vwvu4JpmtoLlMB/J9cDNFi2Xu12kk2x1wEFvpErDd8fZrQny/Qvj9tt8O+GZSPQqHFHxooRRubCkI6UWz3Qlx0GW3H5mRFYz1bqi4SD7BfTiS/LnmIU0UwSjrwsQKBgQDmhT6MPBUfNCREBvYyDu1qaRwRpXH78PvZKPgeaTzZqf8f9+2B97/xEQ1BZoDgjK3RG6CIrHmqjW1+uAFtsU/DvfSq49HlPV2Fdqt16vAeYIU2dnWCkNyl5eWlfxOLwWVqclsiHwHY9RZbmrg7/yW3oUqCF+9Gmd49Oogg4cDQLwKBgQCqpH820p6uRtqcphpYQPrws/L+zlX8Ddh2EiBcPZvu1VOCr9CEdhDguoP6Igk9d+eMnqXW6fczXtS88YuRNiqrg7hynWKtP4XPj6bTUMA9IK5Aum9NdWt7UmT9b+3iV0Dp28/TLIy0jOht0cFpkJTpNfypmIO+h5INPVIkFva++QKBgQClbkoM6bFey1SbXUOheQT4sKXsJAdA/xg+KCCn8m4w5saocoyIEPw2TD5vCNjETTEQN/tlGiHWO9iwb+zWg8DygIfte8FN+lP7S8aQwSHBKxNummSKZttyUyITOrcUPJ5DXf345re0s25wHwDITbsLpTyLUBHvYM0Us8StlFWDEQKBgAxJgfuBmPl1kqI696SpMSiJ3JJqaxiWKqL91SSvLv44kCXV4Q7YrYhxBbXKI54wdxTSC6D5AdrKFklwnxsaqmHlPy/Jk2RkMY9riZintN/x7XotsnwCW3XqzejN2XQ10i/EqydKiuspRkc6FlIynfZY89OGbt4WRvb7FmIQ4T2JAoGBAIVfna3AOKOngLHyjsBMRtpXsipV3rYKatuW5jMPP2WsJRAdn/I5VNxYDB4Su5/ieHjKE49cESeMsZbBB5myO4nUiLiZj3Pmvz7rmlTlGXtOS9anT6vYvWnKk8QSQJAWowE8AIHfN5m4pmZqRo4Es4gQvQt+vNavYEHt/+qWgn4m
-----END RSA PUBLIC KEY-----

View File

@ -0,0 +1,3 @@
-----BEGIN RSA PUBLIC KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCZqJtyqYd4HcYPNQnR2/IDDgcUFXjWs0kDMIre7AF6zNAcFD/vTOCcEzmb0scLhduoy6sEXj6lxdAuNYXKhVJIh2XRdORVMLqtdgeGN3W5rohQSC/8kWt6VmcXJZQw5YDdbSpacSa0djLxX8+lJuQwrkkNQKb41/uGifCwvnpF9sR8DqF9iDQn3LNoV2AkkCmXfXCPh2GJD1DOXes81dxzqWAc1kCSyGIPNgWgspV7rU4Zm5VpnomptxvMnIr3F+HXxM4zVk48JHwA6+FwQaw/G/XdqiZTwFtm65VbEEYrmsj8UYlxzeNOa6xv20AsmhwYJIMAi3Q+ziH1pVDGN1+3AgMBAAECggEAReUnSKIK6D2K4VH79IT68h7IY39c5zTIanYDRWHPTn+pzov7hSvQI86u7s2TEw/BmmeClEsWbiusBcj84eGBS1KjowJr9sBiuhKtW4UQvPTCNtqPUXEIla6F2EaUwSU0WASXNmqv83istZUii/pD5EzzF98n1JvSYyGN5afPUNE3liMI+xsM1WdVuzB+hewLBS/98cFBDcrHbakxjFiBYiyuo3vwvu4JpmtoLlMB/J9cDNFi2Xu12kk2x1wEFvpErDd8fZrQny/Qvj9tt8O+GZSPQqHFHxooRRubCkI6UWz3Qlx0GW3H5mRFYz1bqi4SD7BfTiS/LnmIU0UwSjrwsQKBgQDmhT6MPBUfNCREBvYyDu1qaRwRpXH78PvZKPgeaTzZqf8f9+2B97/xEQ1BZoDgjK3RG6CIrHmqjW1+uAFtsU/DvfSq49HlPV2Fdqt16vAeYIU2dnWCkNyl5eWlfxOLwWVqclsiHwHY9RZbmrg7/yW3oUqCF+9Gmd49Oogg4cDQLwKBgQCqpH820p6uRtqcphpYQPrws/L+zlX8Ddh2EiBcPZvu1VOCr9CEdhDguoP6Igk9d+eMnqXW6fczXtS88YuRNiqrg7hynWKtP4XPj6bTUMA9IK5Aum9NdWt7UmT9b+3iV0Dp28/TLIy0jOht0cFpkJTpNfypmIO+h5INPVIkFva++QKBgQClbkoM6bFey1SbXUOheQT4sKXsJAdA/xg+KCCn8m4w5saocoyIEPw2TD5vCNjETTEQN/tlGiHWO9iwb+zWg8DygIfte8FN+lP7S8aQwSHBKxNummSKZttyUyITOrcUPJ5DXf345re0s25wHwDITbsLpTyLUBHvYM0Us8StlFWDEQKBgAxJgfuBmPl1kqI696SpMSiJ3JJqaxiWKqL91SSvLv44kCXV4Q7YrYhxBbXKI54wdxTSC6D5AdrKFklwnxsaqmHlPy/Jk2RkMY9riZintN/x7XotsnwCW3XqzejN2XQ10i/EqydKiuspRkc6FlIynfZY89OGbt4WRvb7FmIQ4T2JAoGBAIVfna3AOKOngLHyjsBMRtpXsipV3rYKatuW5jMPP2WsJRAdn/I5VNxYDB4Su5/ieHjKE49cESeMsZbBB5myO4nUiLiZj3Pmvz7rmlTlGXtOS9anT6vYvWnKk8QSQJAWowE8AIHfN5m4pmZqRo4Es4gQvQt+vNavYEHt/+qWgn4m
-----END RSA PUBLIC KEY-----

View File

@ -0,0 +1,3 @@
-----BEGIN RSA PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmaibcqmHeB3GDzUJ0dvyAw4HFBV41rNJAzCK3uwBeszQHBQ/70zgnBM5m9LHC4XbqMurBF4+pcXQLjWFyoVSSIdl0XTkVTC6rXYHhjd1ua6IUEgv/JFrelZnFyWUMOWA3W0qWnEmtHYy8V/PpSbkMK5JDUCm+Nf7honwsL56RfbEfA6hfYg0J9yzaFdgJJApl31wj4dhiQ9Qzl3rPNXcc6lgHNZAkshiDzYFoLKVe61OGZuVaZ6JqbcbzJyK9xfh18TOM1ZOPCR8AOvhcEGsPxv13aomU8BbZuuVWxBGK5rI/FGJcc3jTmusb9tALJocGCSDAIt0Ps4h9aVQxjdftwIDAQAB
-----END RSA PUBLIC KEY-----

View File

@ -0,0 +1,3 @@
-----BEGIN RSA PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmaibcqmHeB3GDzUJ0dvyAw4HFBV41rNJAzCK3uwBeszQHBQ/70zgnBM5m9LHC4XbqMurBF4+pcXQLjWFyoVSSIdl0XTkVTC6rXYHhjd1ua6IUEgv/JFrelZnFyWUMOWA3W0qWnEmtHYy8V/PpSbkMK5JDUCm+Nf7honwsL56RfbEfA6hfYg0J9yzaFdgJJApl31wj4dhiQ9Qzl3rPNXcc6lgHNZAkshiDzYFoLKVe61OGZuVaZ6JqbcbzJyK9xfh18TOM1ZOPCR8AOvhcEGsPxv13aomU8BbZuuVWxBGK5rI/FGJcc3jTmusb9tALJocGCSDAIt0Ps4h9aVQxjdftwIDAQAB
-----END RSA PUBLIC KEY-----

View File

@ -0,0 +1,3 @@
-----BEGIN RSA PUBLIC KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCVdPz3OdVbN/XDm0zRzGiQ3vw1eB387D2ePMP2wGcbo7zZypLvsQwa7qzz6b0+THy697VEmMOoCM7SXUv5vsqDK5dmOQK66RLhUfv/DYK5yxcZlGYwYjmnT79W0Yppu9BmtQzMeggp2+LHHCfcc39krZJvlLagLEVS1AikD9p9RcjaGFfagNNetFOjxzQP6Zdi3SsBqokAW2zcu6LH02ERaZl3fSk5F4bjrIpkFipkprJoZzXfunui0hCKO6jQrCZ56YRpFY1XlPohALS5tP4VI8cjJXrOysdIX9y88mLtD5Ts1ZYJHudkbu4/xkQzbzxyLnQtajQnaXnIFu+ML6ZJAgMBAAECggEASH/Sgl7kl3ZC2ptIHXFpu/TfJVTaPymeDldtvBHDMo4v+vogYvNgauQis8NL0J+r1cp5fQgZyTZUlYk6ZLDfbdfEforjPyX2yaRKeIPmSRgyYW8yTwAm9Xli2MuWuAmqY1gqGDqOITgP/wQydeb1AjKMmWHrYTF4g2BlvKgQFbn4JaEGScslm1CIgGWt+rt9wJ3q9A+3U2irsZGjvsFFJ/0WP00w10QQ9Faq3yfMQTQ/bF+6E63pCOm1MZbGzHzpEbvEpp/G8mMjxp+Hs+3HCra4XWdZysp5+1DUxOWFRqQ8WqyNf83OAZAph8YTHKghKt0ncX8NKF40Ws5f7UJV/QKBgQDdXTevUWF2cQpra95ab66Ba77uIn2MmwrYOdILwh2eSvjeR9H1mJPBZ2+NKMBNuYA7Tz0E8qBGborX5TuwvrWmtrWigKEU2bDFLqIATecs56MW2kB4wbCIWyQj975NrHE1NN3ip5nYQSmS2Wy/QhzSgBjJrun/udJUGW0ArjIPuwKBgQCs14QkjArHAGB1/CArG1XGuAdZBAj82o+AtEuag5JpIbC9RtlA2H9CnH3ugUhrPV192XOULd6WtujR4gv9CVdFSZXtgCeB52dj62C5LS7iH98e6QfduYvxNGljKEe87iXd62qV7gLLOi/vtoZEu8Mejqw7HQ1o6VkKLr4TI5Q3ywKBgQCJNXSEmN7eeWbJ+sySJdN2qQBpvrsvYhKwv/YwD5woN7RWoxHDN1WudZyxVGcORkLzgEQEQxeRUIeDFrWO8kbKFUo0daJiuCRXtHX51k/Kh7GRQqrfrr7rZgLawH8WyiJJpoE6MkSrxIguW9KKIkKXP4sdx+uG9Pkn47Kqz058bQKBgAk+aXnO55CnC4Gj31CO4LKFCxeOqLBlPAGFIvn7iWwH+jzVOi9GpN+6IN4NmgLqQELHy2+kWGA1HhSDg2KgCkPRYKxYC0TeTGBCqWSd7wD29WbgzaPlFX/r7qr374ZCMlJBEe080nduADxQxbONWy0aMknjDuGKgVGTGGVLpNSrAoGARHsbxf/8th/Cs/TYD8mvZgPkgFMyKZuZM4Qe6VEwZazHplWXQ0BibYxloyb/nVYABxVJ0c4noP0I7pQ2H2Y68tvNWnOmVN3NaC5t1tPhE1eAA3Nfo3S3+Ma+X1bmprSQ0nyr3UeFvR2Pl3qKj5diTo4QU8RdSi4K6SwbqaK0+Ys=
-----END RSA PUBLIC KEY-----

View File

@ -0,0 +1,3 @@
-----BEGIN RSA PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlXT89znVWzf1w5tM0cxokN78NXgd/Ow9njzD9sBnG6O82cqS77EMGu6s8+m9Pkx8uve1RJjDqAjO0l1L+b7KgyuXZjkCuukS4VH7/w2CucsXGZRmMGI5p0+/VtGKabvQZrUMzHoIKdvixxwn3HN/ZK2Sb5S2oCxFUtQIpA/afUXI2hhX2oDTXrRTo8c0D+mXYt0rAaqJAFts3Luix9NhEWmZd30pOReG46yKZBYqZKayaGc137p7otIQijuo0KwmeemEaRWNV5T6IQC0ubT+FSPHIyV6zsrHSF/cvPJi7Q+U7NWWCR7nZG7uP8ZEM288ci50LWo0J2l5yBbvjC+mSQIDAQAB
-----END RSA PUBLIC KEY-----