支付成功回调修改订单

master
shenzhuan 2 years ago
parent c012b3f7dd
commit 0d966f5533

@ -8,26 +8,123 @@ require (
github.com/smartwalle/alipay/v3 v3.1.8
)
require github.com/go-pay/gopay v1.5.86
require (
git.mashibing.com/msb_47094/shopping-comm v0.0.0-20221111074328-ab1a5ce6768e
github.com/asim/go-micro/plugins/registry/consul/v4 v4.7.0
go-micro.dev/v4 v4.2.1
google.golang.org/grpc v1.46.2
google.golang.org/protobuf v1.28.1
)
require (
cloud.google.com/go v0.100.2 // indirect
cloud.google.com/go/compute v1.6.1 // indirect
cloud.google.com/go/firestore v1.6.1 // indirect
github.com/Microsoft/go-winio v0.5.0 // indirect
github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7 // indirect
github.com/acomagu/bufpipe v1.0.3 // indirect
github.com/armon/go-metrics v0.3.10 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/bitly/go-simplejson v0.5.0 // indirect
github.com/cespare/xxhash/v2 v2.1.2 // indirect
github.com/coreos/go-semver v0.3.0 // indirect
github.com/coreos/go-systemd/v22 v22.3.2 // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.0 // indirect
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
github.com/emirpasic/gods v1.12.0 // indirect
github.com/fatih/color v1.13.0 // indirect
github.com/fsnotify/fsnotify v1.5.4 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect
github.com/go-git/gcfg v1.5.0 // indirect
github.com/go-git/go-billy/v5 v5.3.1 // indirect
github.com/go-git/go-git/v5 v5.4.2 // indirect
github.com/go-playground/locales v0.14.0 // indirect
github.com/go-playground/universal-translator v0.18.0 // indirect
github.com/go-playground/validator/v10 v10.11.1 // indirect
github.com/go-redis/redis/v8 v8.11.5 // indirect
github.com/go-sql-driver/mysql v1.6.0 // indirect
github.com/goccy/go-json v0.9.11 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang/protobuf v1.5.2 // indirect
github.com/google/go-cmp v0.5.8 // indirect
github.com/google/uuid v1.2.0 // indirect
github.com/googleapis/gax-go/v2 v2.4.0 // indirect
github.com/hashicorp/consul/api v1.12.0 // indirect
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
github.com/hashicorp/go-hclog v1.2.0 // indirect
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
github.com/hashicorp/go-rootcerts v1.0.2 // indirect
github.com/hashicorp/golang-lru v0.5.4 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/hashicorp/serf v0.9.7 // indirect
github.com/imdario/mergo v0.3.12 // indirect
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
github.com/jinzhu/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.5 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351 // indirect
github.com/leodido/go-urn v1.2.1 // indirect
github.com/magiconair/properties v1.8.6 // indirect
github.com/mattn/go-colorable v0.1.12 // indirect
github.com/mattn/go-isatty v0.0.16 // indirect
github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
github.com/miekg/dns v1.1.43 // indirect
github.com/mitchellh/go-homedir v1.1.0 // indirect
github.com/mitchellh/hashstructure v1.1.0 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/nxadm/tail v1.4.8 // indirect
github.com/opentracing/opentracing-go v1.2.0 // indirect
github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c // indirect
github.com/patrickmn/go-cache v2.1.0+incompatible // indirect
github.com/pelletier/go-toml v1.9.5 // indirect
github.com/pelletier/go-toml/v2 v2.0.5 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/prometheus/client_golang v1.14.0 // indirect
github.com/prometheus/client_model v0.3.0 // indirect
github.com/prometheus/common v0.37.0 // indirect
github.com/prometheus/procfs v0.8.0 // indirect
github.com/russross/blackfriday/v2 v2.0.1 // indirect
github.com/sagikazarmark/crypt v0.6.0 // indirect
github.com/sergi/go-diff v1.1.0 // indirect
github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect
github.com/smartwalle/crypto4go v1.0.2 // indirect
github.com/spf13/afero v1.8.2 // indirect
github.com/spf13/cast v1.5.0 // indirect
github.com/spf13/jwalterweatherman v1.1.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/spf13/viper v1.13.0 // indirect
github.com/subosito/gotenv v1.4.1 // indirect
github.com/uber/jaeger-client-go v2.30.0+incompatible // indirect
github.com/uber/jaeger-lib v2.4.1+incompatible // indirect
github.com/ugorji/go/codec v1.2.7 // indirect
github.com/urfave/cli/v2 v2.3.0 // indirect
github.com/xanzy/ssh-agent v0.3.0 // indirect
go.etcd.io/etcd/api/v3 v3.5.4 // indirect
go.etcd.io/etcd/client/pkg/v3 v3.5.4 // indirect
go.etcd.io/etcd/client/v2 v2.305.4 // indirect
go.etcd.io/etcd/client/v3 v3.5.4 // indirect
go.opencensus.io v0.23.0 // indirect
go.uber.org/atomic v1.7.0 // indirect
go.uber.org/multierr v1.6.0 // indirect
go.uber.org/zap v1.17.0 // indirect
golang.org/x/crypto v0.2.0 // indirect
golang.org/x/net v0.2.0 // indirect
golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 // indirect
golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f // indirect
golang.org/x/sys v0.2.0 // indirect
golang.org/x/text v0.4.0 // indirect
google.golang.org/protobuf v1.28.1 // indirect
golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df // indirect
google.golang.org/api v0.81.0 // indirect
google.golang.org/appengine v1.6.7 // indirect
google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
gopkg.in/warnings.v0 v0.1.2 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
gorm.io/driver/mysql v1.4.3 // indirect
gorm.io/gorm v1.24.0 // indirect
)

File diff suppressed because it is too large Load Diff

@ -1,12 +1,20 @@
package main
import (
"context"
"fmt"
common "git.mashibing.com/msb_47094/shopping-comm"
"github.com/asim/go-micro/plugins/registry/consul/v4"
"github.com/gin-gonic/gin"
"github.com/smartwalle/alipay/v3"
"go-micro.dev/v4"
"go-micro.dev/v4/registry"
"io/ioutil"
"log"
"net/http"
"os/exec"
"payment/proto"
"strings"
"time"
)
// 将公钥提供给支付宝(通过支付宝后台上传)对我们请求的数据进行签名验证,我们的代码中将使用私钥对请求数据签名。
@ -23,6 +31,9 @@ var (
//私钥
PrivateKey = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCnWjoZEzvY8ptTb335WY53XnbuEqn7/9+kQ+TPvIEcEKhoAABK4hppDK4ce0kByNWVvhc2MuhHIhdDvWs9Bq5yz/mqOa/I8CV8E0mFVpQBXllfta1ccwAR1MHNU4M/lrGNjkFLNKam+b1808O5pTdrLKoQ0/nKgcWzbNNKmfBGiH0K366up+sAlEHHjfk7BUnoBu/puUpxcxJEuWCr2Ezl9vMUe/s5DxBe+uwH00DqzY8QsjmFssW5bRPxbJfgBoUijZIeccaW52sPAoLE7ceiXCNmhAo1yxmEM4bQDeRxVSjCmc/dKqRux9Uh33jcrG9dMii4Chhht8Pr8EpxWUL9AgMBAAECggEAYsQ3QZE+Yt1bmjRUrpKSKBTSL9NICveJ75I6OffQYtXZ7fcCNS+X0qOvJhQElE8I7qUPYedNep2+CTaDUbLdxdjEShhdjENefAmN/GmKU/xw1rGMLOGaCuv7rMg6z46KHzbzhgT+zdDaag84lhnRySjE/cV8yG0qVqhFUuPjEFyMrY8lb/68P+E3P4Vm+hvdaOe10ayLmYm7YBh4Z7eSdhSxENBs+7dIG37Z2xC6FQRPm5qLrFdP03tianX71ZU/J7yky4HceqW4lIW8g4CSbWlCKewaucvnZ7q449/P/PSIbPr4KxQS8bGooQF6LGYEkRISWpYIQWBSjXvUU7PDaQKBgQDV3Hgwp93FdLU414ArdXzbklzVC3SEKdIXEBmt9s+Ec13I1xPDjM1HFezow4S/aaqi5soYyR6koVvsaXeHk+cNlphgZj6lz+p0BQvCvTrjkRFwSDdlBNuxgaiwZbjjUHZPwO42d3k2kiUwyRNcGIyDyPzo4b19D06VX2JIKdpp+wKBgQDIU8ZfQUj11Zgqx/dqd5XASGtoSQNwZPROJyLFwTMg6okgdevdoWaFgRUttPDRBhdcrtmVq7voJ35xoriKNFCSvkZc8GAVKiYgIGLXNscDKZx1EP5yc9VVbUnnTW4QXBQRB+VcLGmuh1DOPTkP+sEsTZhPM5TTMCX9HxrDtW6tZwKBgQCAlkBaGQTaTbMNC14QQ2Mgbp+MpYeYU8DzhwW5uNXLcMZqFQ/YG1fuLvu0dKLjqHgl3JiVUJAxMqgfvMZW6ZIadHsIM1Hlxt7UhZgtrjOzUq1mkrVj8wjZcPlpnrANVXrdt0ZDz5A9RKBB9hTC4ivSrU2MBPc3M7XvUFu6wheGcwKBgQCCMCeIOiZPVWuZyfDZ6TOSDb53vJOWlJVMwRRRDljK+ID7bodFtqGo+5Wm6aNjRCEko6FWKpBotFnxQb3KW2tNooiZ18Gpn4W9dS6nDLtTK9S5I70o5mxrIyZXQrPXv+9ujgIZ3+cifGAgWBtgbibiQt9MAYqjoPPfRzqem6d82wKBgQCjcqFOK7Ff0bSz6S2PzFLWyHBlrEKXI+9+9N5nS8aFB8uJduu0PqK4CXs6FqbY+6xuZ9Qdhe9j2NXoqZoJyQlb8/aL1etT+/JP0Md9Wi0v9SVnnz6Ci1RmJEjO02Q/xrpphEbK87h7YpNUI4flHR4ZCr9EmXqdXRTuXImUImc3uw=="
ApliClient, _ = alipay.New(APPID, PrivateKey, false)
FindOrderClient = proto.NewFindOrderService("", nil)
UpdateTraderClient = proto.NewUpdateTradeOrderService("", nil)
)
// 初始化的init
@ -30,18 +41,28 @@ func init() {
ApliClient.LoadAppPublicCert(AliAppPublicKey)
ApliClient.LoadAliPayPublicCert(AliPublicKey)
//证书的方式 ApliClient.LoadAliPayRootCert()
//注册中心
consulReg := consul.NewRegistry(func(options *registry.Options) {
options.Addrs = []string{common.ConsulReistStr}
})
rpcServer := micro.NewService(
micro.Name("shop-payment"),
micro.Registry(consulReg),
)
FindOrderClient = proto.NewFindOrderService("trade-order", rpcServer.Client())
UpdateTraderClient = proto.NewUpdateTradeOrderService("trade-order", rpcServer.Client())
}
// 手机端的支付 弹出选择APP 还是 H5
func TradeWapAliPay(c *gin.Context) {
fmt.Println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> TradeAppAliPay ")
var pay = alipay.TradeWapPay{}
pay.TotalAmount = "11.0"
pay.OutTradeNo = time.Now().String()
pay.TotalAmount = c.Query("payAmount")
pay.OutTradeNo = c.Query("orderNo")
//支付之后 支付宝回调的API
//pay.ReturnURL = "http://127.0.0.1:8086/return"
pay.NotifyURL = "http://jixa9i.natappfree.cc/return"
pay.Body = "测试APP订单"
pay.NotifyURL = "http://hegf3z.natappfree.cc/return"
pay.Body = "APP订单"
pay.Subject = "商品标题"
res, err := ApliClient.TradeWapPay(pay)
if err != nil {
@ -56,11 +77,11 @@ func TradeWapAliPay(c *gin.Context) {
func TradePageAlipay(c *gin.Context) {
fmt.Println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> TradePageAlipay ")
var p = alipay.TradePagePay{}
p.NotifyURL = "http://jixa9i.natappfree.cc/return" //支付异步
p.NotifyURL = "http://hegf3z.natappfree.cc/return" //支付异步
//p.ReturnURL = "http://127.0.0.1:8086/return" //同步
p.Subject = "修正了中文的 Bug"
p.OutTradeNo = time.Now().String()
p.TotalAmount = "10.00"
p.Subject = "商品支付"
p.OutTradeNo = c.Query("orderNo")
p.TotalAmount = c.Query("payAmount")
p.ProductCode = "FAST_INSTANT_TRADE_PAY"
res, err := ApliClient.TradePagePay(p)
if err != nil {
@ -92,17 +113,22 @@ trade_no=2022111722001428310502276237&
auth_app_id=2021000116681444&
receipt_amount=10.00&
point_amount=0.00&
app_id=2021000116681444&buyer_pay_
app_id=2021000116681444&
buyer_pay_amount=10.00&
sign_type=RSA2&
seller_id=2088621954959062
*/
func AliPayNotify(c *gin.Context) {
fmt.Println(" >>>>>>>>>>>>>>>>> AliPayNotify >>>>>>>>>>>>>>>>>")
//获取请求报文的长度
conLen := c.Request.ContentLength
//新建一个字节切片 长度
body := make([]byte, conLen)
n, _ := c.Request.Body.Read(body)
vals := string(body[0:n])
//conLen := c.Request.ContentLength
////新建一个字节切片 长度
//body := make([]byte, conLen)
//n, _ := c.Request.Body.Read(body)
//改进读取的方法
data, _ := ioutil.ReadAll(c.Request.Body)
vals := string(data[0:len(data)])
fmt.Println(vals)
//验证是否支付成功
if strings.Contains(vals, "TRADE_SUCCESS") {
@ -113,11 +139,36 @@ func AliPayNotify(c *gin.Context) {
//out_trade_no=xxxx
if strings.HasPrefix(v, "out_trade_no") {
index := strings.Index(v, "=")
no = v[index+1 : len(v)-1]
no = v[index+1 : len(v)]
}
}
fmt.Println("订单:", no, "成功支付")
//grpc 处理 no
//远程调用 服务
//查询订单详情
req := &proto.FindOrderReq{}
//req.Id =
req.OrderNo = no
obj, err := FindOrderClient.FindOrder(context.TODO(), req)
if err != nil {
log.Println("findOrder err :", err)
//common.RespFail(c.Writer, resp, "查询失败")
}
fmt.Println("findOrder:", obj)
//c.JSON(http.StatusOK, gin.H{"findOrder": "SUCCESS", "Message": obj})
//修改订单
reqUpdate := &proto.AddTradeOrderReq{}
tradeOrder := &proto.TradeOrder{}
tradeOrder.ID = obj.TradeOrder.ID
reqUpdate.TradeOrder = tradeOrder
//订单状态1待支付2已关闭3已支付4已发货5已收货6已完成7已追评
reqUpdate.TradeOrder.OrderStatus = 3
_, err = UpdateTraderClient.UpdateTradeOrder(context.TODO(), reqUpdate)
if err != nil {
log.Println("/UpdateTradeOrder err ", err)
return
}
c.JSON(http.StatusOK, gin.H{"reslut": "SUCCESS", "Message": "修改订单支付成功!"})
}
}

@ -0,0 +1,68 @@
/**
* @Auth:ShenZ
* @Description:
*/
syntax = "proto3"; //
option go_package="./;proto"; //1 2 package
package proto ; //
message TradeOrder {
string serverTime = 1;
string expireTime = 2;
float totalAmount =3;
float productAmount = 4;
float shippingAmount = 5;
float discountAmount = 6;
float payAmount = 7; //resp
//
int32 iD = 8;
bool isDeleted = 9;
int32 orderStatus = 10;
string orderNo = 11;
int32 userId =12 ;
int32 createUser =13;
int32 updateUser =14;
string cancelReason =15;
string createTime =16;
string submitTime =17;
}
//
message FindOrderReq {
string id = 1;
string orderNo = 2;
}
message FindOrderResp {
TradeOrder tradeOrder = 1;
}
//
service FindOrder {
rpc FindOrder (FindOrderReq) returns (FindOrderResp){}
}
message AddTradeOrderReq {
repeated int32 cartIds = 1;
bool isVirtual = 2;
int32 recipientAddressId =3;
TradeOrder tradeOrder = 4;
}
message ProductOrder {
int32 productId = 1;
int32 productSkuId = 2;
string productName = 3;
string productImageUrl = 4;
string skuDescribe =5 ;
int32 quantity =6;
float productPrice =7;
float realPrice =8;
float realAmount =9;
}
message AddTradeOrderResp{
TradeOrder tradeOrder = 1;
repeated ProductOrder products =2;
}
service UpdateTradeOrder {
//rpc
rpc UpdateTradeOrder (AddTradeOrderReq) returns (AddTradeOrderResp){}
}

@ -20,7 +20,7 @@ type TraderOrder struct {
AfterSaleDeadlineTime time.Time `json:"afterSaleDeadlineTime"`
OrderStatus int32 `gorm:"default:1" json:"orderStatus"`
OrderSource int32 `gorm:"default:6" json:"orderSource"`
CancelReason int32 `gorm:"cancel_reason" json:"cancelReason"`
CancelReason string `gorm:"cancel_reason" json:"cancelReason"`
OrderType int32 `gorm:"default:1" json:"orderType"`
CreateUser int32 `gorm:"default:1" json:"createUser"`
CreateTime time.Time `json:"createTime"`

@ -70,6 +70,9 @@ func (u *TradeRepository) AddTradeOrder(req *proto.AddTradeOrderReq) (obj *model
// 修改订单
func (u *TradeRepository) UpdateTradeOrder(req *proto.AddTradeOrderReq) (obj *model.TraderOrder, err error) {
trade := model.TraderOrder{}
trade.ID = req.TradeOrder.ID
trade.OrderStatus = req.TradeOrder.OrderStatus
trade.IsDeleted = req.TradeOrder.IsDeleted
trade.UpdateTime = time.Now() //
tb := u.mysqlDB.Model(&model.TraderOrder{}).
Where("id = ?", trade.ID).

@ -29,7 +29,7 @@ func (u *TradeOrderService) AddTradeOrder(req *proto.AddTradeOrderReq) (obj *mod
return u.tradeRepository.AddTradeOrder(req)
}
func (u *TradeOrderService) UpdateTradeOrder(req *proto.AddTradeOrderReq) (obj *model.TraderOrder, err error) {
return u.tradeRepository.AddTradeOrder(req)
return u.tradeRepository.UpdateTradeOrder(req)
}
func (u *TradeOrderService) FindOrder(req *proto.FindOrderReq) (obj *model.TraderOrder, err error) {
return u.tradeRepository.FindOrder(req)

@ -55,7 +55,7 @@ type TradeOrder struct {
UserId int32 `protobuf:"varint,12,opt,name=userId,proto3" json:"userId,omitempty"`
CreateUser int32 `protobuf:"varint,13,opt,name=createUser,proto3" json:"createUser,omitempty"`
UpdateUser int32 `protobuf:"varint,14,opt,name=updateUser,proto3" json:"updateUser,omitempty"`
CancelReason int32 `protobuf:"varint,15,opt,name=cancelReason,proto3" json:"cancelReason,omitempty"`
CancelReason string `protobuf:"bytes,15,opt,name=cancelReason,proto3" json:"cancelReason,omitempty"`
CreateTime string `protobuf:"bytes,16,opt,name=createTime,proto3" json:"createTime,omitempty"`
SubmitTime string `protobuf:"bytes,17,opt,name=submitTime,proto3" json:"submitTime,omitempty"`
}
@ -190,11 +190,11 @@ func (x *TradeOrder) GetUpdateUser() int32 {
return 0
}
func (x *TradeOrder) GetCancelReason() int32 {
func (x *TradeOrder) GetCancelReason() string {
if x != nil {
return x.CancelReason
}
return 0
return ""
}
func (x *TradeOrder) GetCreateTime() string {
@ -2052,7 +2052,7 @@ var file_trade_proto_rawDesc = []byte{
0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52,
0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0c, 0x63,
0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0f, 0x20, 0x01, 0x28,
0x05, 0x52, 0x0c, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12,
0x09, 0x52, 0x0c, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12,
0x1e, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x10, 0x20,
0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12,
0x1e, 0x0a, 0x0a, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x11, 0x20,

@ -33,7 +33,7 @@ message TradeOrder {
int32 userId =12 ;
int32 createUser =13;
int32 updateUser =14;
int32 cancelReason =15;
string cancelReason =15;
string createTime =16;
string submitTime =17;
}

Loading…
Cancel
Save