Browse Source

增加取消接口

master v0.2.0
guzeng 2 years ago
parent
commit
fa31724821
6 changed files with 141 additions and 1 deletions
  1. +7
    -1
      README.md
  2. +75
    -0
      cancel.go
  3. +54
    -0
      common.go
  4. +4
    -0
      order.pb.go
  5. +1
    -0
      order.proto
  6. +0
    -0
      sign.go

+ 7
- 1
README.md View File

@ -1,3 +1,9 @@
# orderrpc
订单rpc
订单rpc
## 自动生成PB文件
~~~
protoc --go_out=./ order.proto
~~~

+ 75
- 0
cancel.go View File

@ -0,0 +1,75 @@
package order
import (
"crypto/md5"
"encoding/hex"
"encoding/json"
"errors"
"log"
"strconv"
"strings"
"time"
"git.tetele.net/tgo/crypter"
"github.com/golang/protobuf/proto"
)
type OrderCancelRes struct {
Success bool
}
func Cancel(dbname, site_id string, order_id string, url ...string) (*OrderCancelRes, error) {
conn, err := rpc_server_conn(url...)
if err != nil {
return nil, err
}
defer conn.Close()
data := map[string]string{
"dbname": dbname,
"site_id": site_id,
"order_id": order_id,
}
data_json, err := json.Marshal(data)
if err != nil {
return nil, err
}
encryData := crypter.DesEn(string(data_json), DES_KEY)
now_int64 := time.Now().Unix()
now := strconv.FormatInt(now_int64, 10)
sign := Sign(encryData, now)
req := &CreateRequest{
proto.String(encryData),
proto.String(now),
proto.String(sign),
nil}
res := &CreateResponse{}
err = conn.Cancel(req, res)
if err != nil {
return nil, err
}
res_data, err := HandleResponse(res)
var res_arr OrderCancelRes
err = json.Unmarshal([]byte(res_data_de), &res_arr)
if err != nil {
return nil, err
}
return &res_arr, nil
}

+ 54
- 0
common.go View File

@ -0,0 +1,54 @@
package order
const DES_KEY = "ordernew"
func rpc_server_conn(url ...string) (*OrderServiceClient, error) {
var order_rpc_url string = "127.0.0.1:7973"
if len(url) > 0 && url[0] != "" {
order_rpc_url = url[0]
}
conn, _, err := DialOrderService("tcp", order_rpc_url)
if err != nil {
return nil, err
}
return conn, nil
}
/**
* 处理返回结果
*/
func HandleResponse(res *CreateResponse) (string, error) {
res_data := res.GetData()
if res_data == "" {
return nil, errors.New("未收到收据")
}
time_int64, err := strconv.ParseInt(res.GetTime(), 10, 64)
if err != nil {
return nil, err
}
now_int64 := time.Now().Unix()
if now_int64-time_int64 > 10 || time_int64-now_int64 > 10 {
//时间误差前后10秒,返回
return nil, errors.New("返回时间错误")
}
check_sign := CheckSign(res.GetSign(), res_data, res.GetTime())
if !check_sign {
return nil, errors.New("返回数据签名错误")
}
//解密
res_data_de := crypter.DesDe(res_data, "ordernew")
return res_data_de
}

+ 4
- 0
order.pb.go View File

@ -100,6 +100,7 @@ func init() {
type OrderService interface {
Create(in *CreateRequest, out *CreateResponse) error
CreateByCart(in *CreateRequest, out *CreateResponse) error
Cancel(in *CreateRequest, out *CreateResponse) error
}
// AcceptOrderServiceClient accepts connections on the listener and serves requests
@ -177,6 +178,9 @@ func (c *OrderServiceClient) Create(in *CreateRequest, out *CreateResponse) erro
func (c *OrderServiceClient) CreateByCart(in *CreateRequest, out *CreateResponse) error {
return c.Call("OrderService.CreateByCart", in, out)
}
func (c *OrderServiceClient) Cancel(in *CreateRequest, out *CreateResponse) error {
return c.Call("OrderService.Cancel", in, out)
}
// DialOrderService connects to an OrderService at the specified network address.
func DialOrderService(network, addr string) (*OrderServiceClient, *rpc.Client, error) {


+ 1
- 0
order.proto View File

@ -19,4 +19,5 @@ message CreateResponse {
service OrderService {
rpc create (CreateRequest) returns (CreateResponse); //
rpc createByCart (CreateRequest) returns (CreateResponse); //
rpc cancel (CreateRequest) returns (CreateResponse); //
}

+ 0
- 0
sign.go View File


Loading…
Cancel
Save