Explorar el Código

reading config into json done

tags/v0.5
patrick hace 5 años
padre
commit
bc8e1c095c
Se han modificado 6 ficheros con 135 adiciones y 17 borrados
  1. +39
    -0
      checksum.go
  2. +16
    -1
      checksum_test.go
  3. +44
    -0
      config.go
  4. +11
    -0
      config.json
  5. +12
    -16
      main.go
  6. +13
    -0
      rpn.go

+ 39
- 0
checksum.go Ver fichero

@@ -4,6 +4,7 @@ import (
"crypto/md5"
"fmt"
"io"
"net/url"
)

func md5str(s string) string {
@@ -11,3 +12,41 @@ func md5str(s string) string {
io.WriteString(h, s)
return fmt.Sprintf("%x", h.Sum(nil))
}

func md5LeanworkForm(form url.Values) string {
s := ""
if _, ok := form["pickupUrl"]; ok {
s += form["pickupUrl"][0]
s += form["receiveUrl"][0]
s += form["signType"][0]
s += form["orderNo"][0]
s += form["orderAmount"][0]
s += form["orderCurrency"][0]
s += form["customerId"][0]
s += md5key
}
return md5str(s)
}

func isLeanworkFormValid(form url.Values) bool {
r := md5LeanworkForm(form)
sign := form["sign"][0]
return r == sign
}

func md5RpnForm(form url.Values) string {
s := ""
if _, ok := form["version"]; ok {
s += "sign_type=" + form["sign_type"][0] + "|"
s += "mid=" + form["mid"][0] + "|"
s += "notify_url=" + form["notify_url"][0] + "|"
s += "order_id=" + form["order_id"][0] + "|"
s += "order_amount=" + form["order_amount"][0] + "|"
s += "order_time=" + form["order_time"][0] + "|"
s += "user_id=" + form["user_id"][0] + "|"
s += "user_name=" + form["user_name"][0] + "|"
s += "user_cardno=" + form["user_cardno"][0] + "|"
s += "key=" + md5key
}
return md5str(s)
}

+ 16
- 1
checksum_test.go Ver fichero

@@ -16,7 +16,7 @@ func TestMD5Sum(t *testing.T) {
t.Errorf("something is wrong %d ", 1)
}

func TestRequestForm(t *testing.T) {
func buildForm() url.Values {
// receiveUrl= [http://publicapi.lwork.com:8080/notify/default_notify]
// orderAmount= [1200]
// customerId= [123]
@@ -36,6 +36,11 @@ func TestRequestForm(t *testing.T) {
form.Add("orderCurrency", "CNY")
form.Add("customerId", "123")
form.Add("sign", "06bcbd40cf6b914ef8ea6596730571ba")
return form
}

func TestRequestForm(t *testing.T) {
form := buildForm()

md5key := "492815086935204"
expected := "06bcbd40cf6b914ef8ea6596730571ba"
@@ -54,3 +59,13 @@ func TestRequestForm(t *testing.T) {
assert := assert.New(t)
assert.Equal(expected, md5str(s), "the md5 result should be equal")
}

func TestMd5Form(t *testing.T) {
form := buildForm()
expected := "06bcbd40cf6b914ef8ea6596730571ba"
expectedkey := "492815086935204"
assert := assert.New(t)
assert.Equal(expectedkey, md5key, "md5key should be 492815086935204")
result := md5LeanworkForm(form)
assert.Equal(expected, result, "expected signature should be equal")
}

+ 44
- 0
config.go Ver fichero

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

import (
"encoding/json"
"fmt"
"io/ioutil"
"log"
)

type AppConfig struct {
Rpn struct {
Url string `json:Url`
UrlTest string `json:UrlTest`
MD5P2P string `json:MD5P2P`
MD5FAT string `json:MD5FAT`
} `json:Rpn`
LeanWork struct {
MD5Key string `json:MD5Key`
} `json:LeanWork`
}

var Config AppConfig

func readConfig() error {
log.Printf("Read configration from config.json")
body, err := ioutil.ReadFile("config.json")
if err != nil {
log.Fatal("Fatal error Cannot read config ..")
return err
}
err = json.Unmarshal(body, &Config)
if err != nil {
log.Fatal("cannot read config into json")
return err
}

j, err := json.MarshalIndent(Config, "", "\t")
if err != nil {
log.Fatal("cannot print back to json")
return err
}
fmt.Println(string(j))
return err
}

+ 11
- 0
config.json Ver fichero

@@ -0,0 +1,11 @@
{
"Rpn": {
"Url" : "https://deposit.paylomo.net/pay.php?r=payEasy",
"UrlTest" : "https://deposit-mac.chinapaytech.com/pay.php?r=payEasy",
"MD5P2P" : "370296119874502",
"MD5FAT" : "207841502473198"
},
"LeanWork" :{
"MD5Key" : "492815086935204"
}
}

+ 12
- 16
main.go Ver fichero

@@ -1,7 +1,6 @@
package main

import (
"crypto/md5"
"database/sql"
"fmt"
"html/template"
@@ -158,31 +157,28 @@ func StartPay(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "fuck")
return
}
s := ""
r.ParseForm()

if !isLeanworkFormValid(r.Form) {
fmt.Fprintf(w, "invalid request")
return
}

for key, value := range r.Form {
fmt.Printf("%s= %s\n", key, value)
fmt.Fprintf(w, "%s= %s\n", key, value)
}
if _, ok := r.Form["pickupUrl"]; ok {
s += r.Form["pickupUrl"][0]
s += r.Form["receiveUrl"][0]
s += r.Form["signType"][0]
s += r.Form["orderNo"][0]
s += r.Form["orderAmount"][0]
s += r.Form["orderCurrency"][0]
s += r.Form["customerId"][0]
s += md5key
}
//var h = md5.New()
data := []byte(s)
fmt.Printf("my md5=%x", md5.Sum(data))
fmt.Fprintf(w, "my md5=%x", md5.Sum(data))
sign := md5LeanworkForm(r.Form)

fmt.Printf("my md5=%s, valid = %t", sign, isLeanworkFormValid(r.Form))
fmt.Fprintf(w, "my md5=%s", sign)

}

func main() {
readConfig()
return

log.Println("Server started on: http://localhost:8080")
http.HandleFunc("/", StartPay)
//http.HandleFunc("/", Index)

+ 13
- 0
rpn.go Ver fichero

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

import "net/url"

// var url = "https://deposit.paylomo.net/pay.php?r=payEasy" //production
// var url = "https://deposit-mac.chinapaytech.com/pay.php?r=payEasy" //test
// var md5p2p = "370296119874502"
// var md5fat = "207841502473198"

//send request to RPN to initiate transaction
func sendReq(form url.Values) {

}

Cargando…
Cancelar
Guardar