Переглянути джерело

let user choose what methods need to make payment

tags/v0.5
patrick 5 роки тому
джерело
коміт
adbd1f2413
4 змінених файлів з 88 додано та 28 видалено
  1. +44
    -16
      db.go
  2. +12
    -0
      form/StartPay.tmpl
  3. +15
    -0
      leanwork_request.go
  4. +17
    -12
      purchase.go

+ 44
- 16
db.go Переглянути файл

"fmt" "fmt"
"log" "log"
"net/http" "net/http"
"strconv"
) )


type TransactionDB struct { type TransactionDB struct {
defer m.h.Close() defer m.h.Close()
} }


func (m *TransactionDB) addRequest(r *http.Request) error {
if err := m.conn(Config); err != nil {
return err
func (m *TransactionDB) addRequest(r *http.Request) (row LeanworkRequest, err error) {
if err = m.conn(Config); err != nil {
return row, err
} }
defer m.close()

r.ParseForm() r.ParseForm()
//assuming form has been parsed //assuming form has been parsed
pickupUrl := r.Form["pickupUrl"][0]
receiveUrl := r.Form["receiveUrl"][0]
signType := r.Form["signType"][0]
orderNo := r.Form["orderNo"][0]
orderAmount := r.Form["orderAmount"][0]
orderCurrency := r.Form["orderCurrency"][0]
customerId := r.Form["customerId"][0]
sign := r.Form["sign"][0]
row = LeanworkRequest{}
pickupUrl, _ := retrieveFormValue(r.Form, "pickupUrl")
receiveUrl, _ := retrieveFormValue(r.Form, "receiveUrl")
signType, _ := retrieveFormValue(r.Form, "signType")
orderNo, _ := retrieveFormValue(r.Form, "orderNo")
orderAmount, _ := retrieveFormValue(r.Form, "orderAmount")
orderCurrency, _ := retrieveFormValue(r.Form, "orderCurrency")
customerId, _ := retrieveFormValue(r.Form, "customerId")
sign, _ := retrieveFormValue(r.Form, "sign")
valid := isLeanworkFormValid(r.Form) valid := isLeanworkFormValid(r.Form)
ip4 := getClientIPLong(r) ip4 := getClientIPLong(r)


insForm, err := m.h.Prepare("INSERT INTO request(pickupUrl, receiveUrl, signType, orderNo, orderAmount, orderCurrency, customerId, sign, valid, ip4) VALUES(?,?,?,?,?,?,?,?,?,?)") insForm, err := m.h.Prepare("INSERT INTO request(pickupUrl, receiveUrl, signType, orderNo, orderAmount, orderCurrency, customerId, sign, valid, ip4) VALUES(?,?,?,?,?,?,?,?,?,?)")
if err == nil {
insForm.Exec(pickupUrl, receiveUrl, signType, orderNo, orderAmount, orderCurrency, customerId, sign, valid, ip4)
log.Println("INSERT: customerId: " + customerId + " | orderAmount: " + orderCurrency + " " + orderAmount)
if err != nil {
log.Printf("Failed to prepare SQL statment for insert")
return
} }
m.close()
return err

res, err := insForm.Exec(pickupUrl, receiveUrl, signType, orderNo, orderAmount, orderCurrency, customerId, sign, valid, ip4)
if err != nil {
log.Printf("Error inserting leanwork request with orderNo =%s \n", orderNo)
return
}

id, err := res.LastInsertId()
if err != nil {
return
}

row.Id = id
row.PickupUrl = pickupUrl
row.ReceiveUrl = receiveUrl
row.SignType = signType
row.OrderNo = orderNo
row.OrderAmount = orderAmount
row.OrderCurrency = orderCurrency
row.CustomerId = customerId
row.Sign = sign
row.Valid = valid
row.Ip4 = ip4
log.Println("INSERT[" + strconv.FormatInt(row.Id, 10) + "]: customerId: " + customerId + " | orderAmount: " + orderCurrency + " " + orderAmount)

return row, err
} }


func (m *TransactionDB) addRpnOut(r RpnReq) error { func (m *TransactionDB) addRpnOut(r RpnReq) error {

+ 12
- 0
form/StartPay.tmpl Переглянути файл

{{ define "StartPay" }}
<html><body>
select a form of payment
<form id="payment" name="payment" action="/choosePayment " method="POST">
<input id="rpnp2p" type="radio" name="rpn" value="rpnp2p" checked /> <label for="rpnp2p"> RPN P2P </label>
<input id="rpnfat" type="radio" name="rpn" value="rpnfat" /> <label for="rpnfat"> RPN FAT </label>
<input type="hidden" name="id" value="{{ .Id}}" />
<input type="hidden" name="sign" value="{{ .Sign}}" />
<input type="submit" value="submit" />
</form>
</body></html>
{{ end }}

+ 15
- 0
leanwork_request.go Переглянути файл

package main

type LeanworkRequest struct {
Id int64
PickupUrl string
ReceiveUrl string
SignType string
OrderNo string
OrderAmount string
OrderCurrency string
CustomerId string
Sign string
Valid bool
Ip4 uint32
}

+ 17
- 12
purchase.go Переглянути файл



func StartPay(w http.ResponseWriter, r *http.Request) { func StartPay(w http.ResponseWriter, r *http.Request) {
if r.Method != "POST" { if r.Method != "POST" {
fmt.Fprintf(w, "invalid request")
w.WriteHeader(http.StatusMethodNotAllowed)
fmt.Fprintf(w, "invalid method")
return return
} }
r.ParseForm() r.ParseForm()
db.addRequest(r)
if !isLeanworkFormValid(r.Form) {
fmt.Fprintf(w, "invalid request")

row, err := db.addRequest(r)
if err != nil {
w.WriteHeader(http.StatusInternalServerError)
w.Write([]byte("Cannot initiate database transaction"))
return return
} }


for key, value := range r.Form {
fmt.Printf("%s= %s\n", key, value)
//fmt.Fprintf(w, "%s= %s\n", key, value)
if !isLeanworkFormValid(r.Form) {
w.WriteHeader(http.StatusMethodNotAllowed)
fmt.Fprintf(w, "invalid request")
return
} }
sign := md5LeanworkForm(r.Form)
fmt.Printf("my md5=%s, valid = %t", sign, isLeanworkFormValid(r.Form))

askForPaymentInfo(w, r)
askForPaymentSelection(w, row)
return return


// m := RpnReq{} // m := RpnReq{}


} }


func askForPaymentInfo(w http.ResponseWriter, r *http.Request) {
func askForPaymentSelection(w http.ResponseWriter, row LeanworkRequest) {


tmpl.ExecuteTemplate(w, "StartPay", row)
}

func askForPaymentInfo(w http.ResponseWriter, r *http.Request) {
t := template.Must(template.New("askForPaymentInfo").ParseGlob("form/*.tmpl")) t := template.Must(template.New("askForPaymentInfo").ParseGlob("form/*.tmpl"))
t.ExecuteTemplate(os.Stdout, "rpnAskNameAndCard", r.Form) t.ExecuteTemplate(os.Stdout, "rpnAskNameAndCard", r.Form)
t.ExecuteTemplate(w, "rpnAskNameAndCard", r.Form) t.ExecuteTemplate(w, "rpnAskNameAndCard", r.Form)

Завантаження…
Відмінити
Зберегти