@@ -33,4 +33,7 @@ type RechargeOrder struct { | |||
UserCommission string `json:"user_commission" xorm:"default 0.0000 DECIMAL(20,4)"` | |||
Price string `json:"price" xorm:"default 0.0000 DECIMAL(20,4)"` | |||
SettleAt int `json:"settle_at" xorm:"default 0 INT(11)"` | |||
AppId string `json:"app_id" xorm:"comment('购买人') VARCHAR(255)"` | |||
MoneyInAccount int `json:"money_in_account" xorm:"comment('') INT(11)"` | |||
Platform string `json:"platform" xorm:" default '' comment('') VARCHAR(255)"` | |||
} |
@@ -44,6 +44,8 @@ func initConsumes() { | |||
jobs[consumeMd.ZhiosCapitalPoolOrderTotalFunName] = ZhiosCapitalPoolOrderTotal | |||
//jobs[consumeMd.ZhiosRechargeOrderFailDevFunName] = ZhiosRechargeOrderFailDev | |||
} | |||
func Run() { | |||
@@ -183,6 +183,15 @@ var RabbitMqQueueKeyList = []*MqQueue{ | |||
BindKey: "", | |||
ConsumeFunName: "ZhiosAcquisitionCondition", | |||
}, | |||
{ | |||
ExchangeName: "zhios.recharge.order.exchange", | |||
Name: "zhios_recharge_order_fail_dev", | |||
Type: DirectQueueType, | |||
IsPersistent: false, | |||
RoutKey: "order_fail_dev", | |||
BindKey: "", | |||
ConsumeFunName: "ZhiosRechargeOrderFailDev", | |||
}, | |||
} | |||
const ( | |||
@@ -200,6 +209,7 @@ const ( | |||
CanalMallOrdForYouMiShangFunName = "CanalMallOrdForYouMiShang" | |||
YoumishangExchangeStoreFunName = "YoumishangExchangeStore" | |||
ZhiosRechargeOrderFailFunName = "ZhiosRechargeOrderFail" | |||
ZhiosRechargeOrderFailDevFunName = "ZhiosRechargeOrderFailDev" | |||
ZhiosCapitalPoolOrderTotalFunName = "ZhiosCapitalPoolOrderTotal" | |||
ZhiosTikTokUpdateFunName = "ZhiosTikTokUpdate" | |||
ZhiosTikTokAllUpdateFunName = "ZhiosTikTokAllUpdate" | |||
@@ -1,9 +1,11 @@ | |||
package md | |||
type ZhiosRechargeOrderPay struct { | |||
Uid string `json:"uid"` | |||
Mid string `json:"mid"` | |||
Oid string `json:"oid"` | |||
Uid string `json:"uid"` | |||
Mid string `json:"mid"` | |||
Oid string `json:"oid"` | |||
WxappletFilepathUrl string `json:"wxapplet_filepath_url"` | |||
DomainUrl string `json:"domain_url"` | |||
} | |||
type TikTokExChangeRoutKeyForUpdateParam struct { | |||
Cid string `json:"cid"` | |||
@@ -11,10 +11,12 @@ import ( | |||
"applet/app/utils/logx" | |||
"applet/consume/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git/pay" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/recharge" | |||
"encoding/json" | |||
"errors" | |||
"fmt" | |||
"github.com/shopspring/decimal" | |||
"github.com/streadway/amqp" | |||
"github.com/tidwall/gjson" | |||
"strings" | |||
@@ -99,14 +101,52 @@ func handleZhiosRechargeOrderFail(msg []byte) error { | |||
} | |||
if gjson.Get(order, "errno").Int() == 0 && strings.Contains(order, oid) == false { | |||
utils.FilePutContents(mid+"rech", utils.SerializeStr(orderData)) | |||
NSFNTheSameBack := true | |||
if orderData.PayMethod == 3 { | |||
wechatP12ApiclientCert := db.SysCfgGetWithDb(eg, mid, "wechat_p12_apiclient_cert") | |||
wechatPayRefundType := db.SysCfgGetWithDb(eg, mid, "wechat_pay_refund_type") | |||
NSFNTheSameBack = false | |||
if wechatP12ApiclientCert == "" || orderData.TradeNo == "" || wechatPayRefundType != "1" || ord.AppId == "" { | |||
NSFNTheSameBack = true | |||
} else { | |||
params := map[string]string{ | |||
"subject": "聚合充值" + orderData.Title + "退款", | |||
"total_fee": wxMoneyMulHundred(orderData.Amount), | |||
"amount": wxMoneyMulHundred(orderData.Amount), | |||
"out_refund_no": orderData.Oid, | |||
"p12_str": canalMsg.WxappletFilepathUrl + "/" + wechatP12ApiclientCert, | |||
"transaction_id": orderData.TradeNo, | |||
"pay_wx_mch_id": db.SysCfgGetWithDb(eg, mid, "pay_wx_mch_id"), | |||
"pay_wx_api_key": db.SysCfgGetWithDb(eg, mid, "pay_wx_api_key"), | |||
"uid": utils.IntToStr(orderData.Uid), | |||
"notify_url": canalMsg.DomainUrl + "/api/v1/refund/callback/" + mid, | |||
} | |||
//params["p12_str"] = "D:\\Downloads\\WXCertUtil\\cert\\1534243971_20230825_cert\\" + wechatP12ApiclientCert | |||
//params["notify_url"] = strings.ReplaceAll(params["notify_url"], "http:", "https:") | |||
params["pay_wx_appid"] = orderData.AppId | |||
r, r1, err := pay.WxAppRefund(params) | |||
utils.FilePutContents("mall_refund", utils.SerializeStr(params)) | |||
utils.FilePutContents("mall_refund", utils.SerializeStr(r)) | |||
utils.FilePutContents("mall_refund", utils.SerializeStr(r1)) | |||
if err != nil { | |||
utils.FilePutContents("mall_refund", err.Error()) | |||
return err | |||
} | |||
if r.ReturnCode != "SUCCESS" { | |||
return errors.New(r.ReturnMsg) | |||
} | |||
} | |||
} | |||
// 更改为已支付 | |||
orderData.Status = "已退款" | |||
orderData.RefundTime = time.Now() | |||
// 保存ord | |||
row, err := eg.ID(orderData.Id).Cols("status,pay_method,refund_time").Update(&orderData) | |||
if row > 0 && err == nil { | |||
svc.UpdateUserFinValidAndInterFlow(eg, | |||
orderData.Amount, "聚合充值"+orderData.Title+"退款", "aggregation_recharge", 0, 24, orderData.Uid, orderData.Id, int64(orderData.Id), utils.StrToInt64(orderData.Oid)) | |||
if NSFNTheSameBack { | |||
svc.UpdateUserFinValidAndInterFlow(eg, | |||
orderData.Amount, "聚合充值"+orderData.Title+"退款", "aggregation_recharge", 0, 24, orderData.Uid, orderData.Id, int64(orderData.Id), utils.StrToInt64(orderData.Oid)) | |||
} | |||
} else { | |||
return errors.New("err") | |||
} | |||
@@ -117,6 +157,13 @@ func handleZhiosRechargeOrderFail(msg []byte) error { | |||
} | |||
return nil | |||
} | |||
// 微信金额乘100 | |||
func wxMoneyMulHundred(m string) string { | |||
amount, _ := decimal.NewFromString(m) | |||
newM := amount.Mul(decimal.NewFromInt(100)) | |||
return newM.String() | |||
} | |||
func GetApiUrl() string { | |||
aggregationRechargeApiUrl := "" | |||
aggregationRechargeApiUrlData := offical.SysCfgByKey("aggregation_recharge_api_url") | |||
@@ -0,0 +1,154 @@ | |||
package consume | |||
import ( | |||
"applet/app/db" | |||
"applet/app/db/model" | |||
"applet/app/svc" | |||
"applet/app/utils" | |||
"applet/app/utils/logx" | |||
"applet/consume/md" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git/rabbit" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git/pay" | |||
"code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/recharge" | |||
"encoding/json" | |||
"errors" | |||
"fmt" | |||
"github.com/streadway/amqp" | |||
"github.com/tidwall/gjson" | |||
"strings" | |||
"time" | |||
) | |||
func ZhiosRechargeOrderFailDev(queue md.MqQueue) { | |||
fmt.Println(">>>>>>>>>>>>>>>>>>>>>>>>") | |||
ch, err := rabbit.Cfg.Pool.GetChannel() | |||
if err != nil { | |||
logx.Error(err) | |||
return | |||
} | |||
defer ch.Release() | |||
//1、将自己绑定到交换机上 | |||
ch.Bind(queue.Name, queue.ExchangeName, queue.RoutKey) | |||
//2、取出数据进行消费 | |||
ch.Qos(1) | |||
delivery := ch.Consume(queue.Name, false) | |||
var res amqp.Delivery | |||
var ok bool | |||
for { | |||
res, ok = <-delivery | |||
if ok == true { | |||
//fmt.Println(string(res.Body)) | |||
fmt.Println(">>>>>>>>>>>>>>>>CanalOrderConsume<<<<<<<<<<<<<<<<<<<<<<<<<") | |||
err = handleZhiosRechargeOrderFailDev(res.Body) | |||
//_ = res.Reject(false) | |||
if err == nil { | |||
_ = res.Ack(true) | |||
} | |||
} else { | |||
panic(errors.New("error getting message")) | |||
} | |||
} | |||
fmt.Println("get msg done") | |||
} | |||
func handleZhiosRechargeOrderFailDev(msg []byte) error { | |||
//1、解析canal采集至mq中queue的数据结构体 | |||
var canalMsg *md.ZhiosRechargeOrderPay | |||
fmt.Println(string(msg)) | |||
var tmpString string | |||
err := json.Unmarshal(msg, &tmpString) | |||
if err != nil { | |||
fmt.Println(err.Error()) | |||
return err | |||
} | |||
fmt.Println(tmpString) | |||
err = json.Unmarshal([]byte(tmpString), &canalMsg) | |||
if err != nil { | |||
return err | |||
} | |||
mid := canalMsg.Mid | |||
eg := db.DBs[mid] | |||
uid := utils.StrToInt(canalMsg.Uid) | |||
oid := canalMsg.Oid | |||
var orderData model.RechargeOrder | |||
b, err2 := eg.Where("oid=? and uid=?", oid, uid).Get(&orderData) | |||
if err2 != nil { | |||
return errors.New("err") | |||
} | |||
if b == false { | |||
return nil | |||
} | |||
if orderData.Status != "已付款" { | |||
return nil | |||
} | |||
//查询官方接口看看有没有订单 | |||
param, aggregationRechargeApiKey := CommAggregation(eg, mid) | |||
param["out_trade_nums"] = oid | |||
aggregationRechargeApiUrl := GetApiUrl() | |||
order, err := recharge.GetOrder(aggregationRechargeApiUrl, aggregationRechargeApiKey, param) | |||
utils.FilePutContents(mid+"rech", utils.SerializeStr(param)) | |||
utils.FilePutContents(mid+"rech", aggregationRechargeApiKey) | |||
utils.FilePutContents(mid+"rech", utils.SerializeStr(order)) | |||
if err != nil { | |||
utils.FilePutContents(mid+"rech", err.Error()) | |||
return errors.New("err") | |||
} | |||
if gjson.Get(order, "errno").Int() == 0 && strings.Contains(order, oid) == false { | |||
utils.FilePutContents(mid+"rech", utils.SerializeStr(orderData)) | |||
NSFNTheSameBack := true | |||
if orderData.PayMethod == 3 { | |||
wechatP12ApiclientCert := db.SysCfgGetWithDb(eg, mid, "wechat_p12_apiclient_cert") | |||
wechatPayRefundType := db.SysCfgGetWithDb(eg, mid, "wechat_pay_refund_type") | |||
NSFNTheSameBack = false | |||
if wechatP12ApiclientCert == "" || orderData.TradeNo == "" || wechatPayRefundType != "1" || orderData.AppId == "" { | |||
NSFNTheSameBack = true | |||
} else { | |||
params := map[string]string{ | |||
"subject": "聚合充值" + orderData.Title + "退款", | |||
"total_fee": wxMoneyMulHundred(orderData.Amount), | |||
"amount": wxMoneyMulHundred(orderData.Amount), | |||
"out_refund_no": orderData.Oid, | |||
"p12_str": canalMsg.WxappletFilepathUrl + "/" + wechatP12ApiclientCert, | |||
"transaction_id": orderData.TradeNo, | |||
"pay_wx_mch_id": db.SysCfgGetWithDb(eg, mid, "pay_wx_mch_id"), | |||
"pay_wx_api_key": db.SysCfgGetWithDb(eg, mid, "pay_wx_api_key"), | |||
"uid": utils.IntToStr(orderData.Uid), | |||
"notify_url": canalMsg.DomainUrl + "/api/v1/refund/callback/" + mid, | |||
} | |||
params["p12_str"] = "D:\\Downloads\\WXCertUtil\\cert\\1534243971_20230825_cert\\" + wechatP12ApiclientCert | |||
//params["notify_url"] = strings.ReplaceAll(params["notify_url"], "http:", "https:") | |||
params["pay_wx_appid"] = orderData.AppId | |||
r, r1, err := pay.WxAppRefund(params) | |||
utils.FilePutContents("mall_refund", utils.SerializeStr(params)) | |||
utils.FilePutContents("mall_refund", utils.SerializeStr(r)) | |||
utils.FilePutContents("mall_refund", utils.SerializeStr(r1)) | |||
if err != nil { | |||
utils.FilePutContents("mall_refund", err.Error()) | |||
return err | |||
} | |||
if r.ReturnCode != "SUCCESS" { | |||
return errors.New(r.ReturnMsg) | |||
} | |||
} | |||
} | |||
// 更改为已支付 | |||
orderData.Status = "已退款" | |||
orderData.RefundTime = time.Now() | |||
// 保存ord | |||
row, err := eg.ID(orderData.Id).Cols("status,pay_method,refund_time").Update(&orderData) | |||
if row > 0 && err == nil { | |||
if NSFNTheSameBack { | |||
svc.UpdateUserFinValidAndInterFlow(eg, | |||
orderData.Amount, "聚合充值"+orderData.Title+"退款", "aggregation_recharge", 0, 24, orderData.Uid, orderData.Id, int64(orderData.Id), utils.StrToInt64(orderData.Oid)) | |||
} | |||
} else { | |||
return errors.New("err") | |||
} | |||
rechargeNotPayMoney := db.SysCfgGetWithDb(eg, mid, "recharge_not_pay_money") | |||
if rechargeNotPayMoney != "1" { | |||
ZyRechargeMoneyDeal(mid, orderData.Oid, orderData.Uid, utils.StrToFloat64(orderData.ZyAmount), 0, orderData.Title+"退款", "refund") | |||
} | |||
} | |||
return nil | |||
} |
@@ -6,7 +6,7 @@ require ( | |||
code.fnuoos.com/go_rely_warehouse/zyos_go_condition_statistics.git v1.1.2-0.20230518064344-fe7bba4f9ff8 | |||
code.fnuoos.com/go_rely_warehouse/zyos_go_es.git v1.0.0 | |||
code.fnuoos.com/go_rely_warehouse/zyos_go_mq.git v0.0.4 | |||
code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git v1.6.1-0.20230412095020-14ea57f9ee82 | |||
code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git v1.6.2-0.20230825083620-ef8b12df8cf8 | |||
code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git v1.1.21-0.20230703061209-fc6ac71cc155 | |||
github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 | |||
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 | |||
@@ -25,8 +25,9 @@ require ( | |||
github.com/gomodule/redigo v2.0.0+incompatible | |||
github.com/jinzhu/copier v0.3.5 | |||
github.com/json-iterator/go v1.1.12 | |||
github.com/makiuchi-d/gozxing v0.0.0-20210324052758-57132e828831 | |||
github.com/makiuchi-d/gozxing v0.1.1 | |||
github.com/robfig/cron/v3 v3.0.1 | |||
github.com/shopspring/decimal v1.2.0 | |||
github.com/sony/sonyflake v1.0.0 | |||
github.com/streadway/amqp v1.0.0 | |||
github.com/swaggo/swag v1.7.0 | |||