Procházet zdrojové kódy

get rpnOUt works

master
patrick před 5 roky
rodič
revize
4cecb466c2
3 změnil soubory, kde provedl 131 přidání a 3 odebrání
  1. +27
    -3
      rpn.go
  2. +91
    -0
      rpnIn.go
  3. +13
    -0
      rpnOut_test.go

+ 27
- 3
rpn.go Zobrazit soubor

@@ -1,8 +1,10 @@
package main

import (
"database/sql"
"errors"
"fmt"
"log"
"math"
"net/http"
"net/url"
@@ -13,13 +15,13 @@ import (
)

type RpnReq struct {
Order_id string
Version string
Sign_type string
Mid string
Notify_url string
Order_amount string
Order_time string //YYYYMMDDHHMMSS
Order_id string
User_id string
User_name string
User_cardno string
@@ -29,9 +31,8 @@ type RpnReq struct {
//database specific
Id int64
Leanwork int64
Callback int64
Ip4 uint32
Ip4location string
Ip4location sql.NullString
Ts mysql.NullTime
}

@@ -210,3 +211,26 @@ func (m *RpnReq) sendRedirect(w http.ResponseWriter, row LeanworkRequest) {
m.Url = Config.Rpn.Url
tmpl.ExecuteTemplate(w, "rpnCallOutRedirect", *m)
}

func getRpnOutByOrderId(order_id string) (ret RpnReq, err error) {
if err = db.conn(Config); err != nil {
return
}
defer db.close()

q := "SELECT * FROM rpnOut WHERE order_id = ? ORDER BY id DESC LIMIT 1"
err = db.h.QueryRow(q, order_id).Scan(
&ret.Id, &ret.Leanwork, &ret.Version,
&ret.Sign_type, &ret.Mid, &ret.Notify_url,
&ret.Order_amount, &ret.Order_time, &ret.Order_id,
&ret.User_id, &ret.User_name, &ret.User_cardno, &ret.Signature,
&ret.Ip4, &ret.Ip4location, &ret.Ts)
if err != nil {
if err == sql.ErrNoRows {
log.Println("trying to retrieve rpnOut(order_id=" + order_id + ") but not found")
} else {
log.Println("Error retrieving rpnOut(order_id=" + order_id + ") encountered : " + err.Error())
}
}
return
}

+ 91
- 0
rpnIn.go Zobrazit soubor

@@ -0,0 +1,91 @@
package main

import (
"database/sql"
"log"
"strconv"

"github.com/go-sql-driver/mysql"
)

type RpnIn struct {
Id int64
Leanwork int64
Order_id string
Order_time string
Order_amount string
Deal_id string
Deal_time string
Pay_amount string
Pay_result string
Signature string
Ts mysql.NullTime
}

//get given RpnIn record based on ID
func getRpnInById(id int64) (ret RpnIn, err error) {
if err = db.conn(Config); err != nil {
return
}
defer db.close()

q := "SELECT * FROM rpnIn WHERE id = ? "
err = db.h.QueryRow(q, id).Scan(
&ret.Id, &ret.Leanwork, &ret.Order_id,
&ret.Order_time, &ret.Order_amount, &ret.Deal_id,
&ret.Deal_time, &ret.Pay_amount, &ret.Pay_result,
&ret.Signature, &ret.Ts)
if err != nil {
if err == sql.ErrNoRows {
log.Println("trying to retrieve rpnIn(" + strconv.FormatInt(id, 10) + ") but not found")
} else {
log.Println("Error retrieving rpnIn(" + strconv.FormatInt(id, 10) + ") encountered : " + err.Error())
}
}
return
}

//add to database
func (m *RpnIn) add() (ret RpnIn, err error) {
if err = db.conn(Config); err != nil {
return
}
defer db.close()

q := `"INSERT INTO rpnIn(
leanwork, order_id, order_time, order_amount, deal_id,
deal_time, pay_amount, pay_result, signature)
VALUES(?,?,?,?,?,?,?,?,?)
`
insForm, err := db.h.Prepare(q)
if err != nil {
log.Printf("Failed to prepare SQL statment for insert")
return
}
res, err := insForm.Exec(
m.Leanwork, m.Order_id, m.Order_time, m.Order_amount, m.Deal_id,
m.Deal_time, m.Pay_amount, m.Pay_result, m.Signature)
if err != nil {
log.Printf("Error inserting rpnIn with orderNo =%s \n", m.Order_id)
return
}
id, err := res.LastInsertId()
if err != nil {
log.Printf("Cannot retrieve lastInsertId for orderID %s", m.Order_id)
return
}

return getRpnInById(id)
}

func (m *RpnIn) signature() string {
s := "order_id=" + m.Order_id
s += "|order_time=" + m.Order_time
s += "|order_amount=" + m.Order_amount
s += "|deal_id=" + m.Deal_id
s += "|deal_time=" + m.Deal_time
s += "|pay_amount=" + m.Pay_amount
s += "|pay_result=" + m.Pay_result

return s
}

+ 13
- 0
rpnOut_test.go Zobrazit soubor

@@ -0,0 +1,13 @@
package main

import (
"testing"
)

func TestGetRpnOutByOrderId(t *testing.T) {
order_id := "200310160057TW002184000000000001"
ret, _ := getRpnOutByOrderId(order_id)
if ret.Id != 3 {
t.Error("we expect id to be 3")
}
}

Načítá se…
Zrušit
Uložit