|
- package main
-
- import (
- "fmt"
- "log"
- "net/http"
- "net/http/httputil"
- )
-
- //RPN callback us about payment result
- func rpnNotify(w http.ResponseWriter, r *http.Request) {
-
- if r.Method != "POST" {
- errPage(w, http.StatusMethodNotAllowed, "invalid request")
- log.Println("ERROR RPN request,not HTTP POST")
- logRequestDebug(httputil.DumpRequest(r, true))
- return
- }
- ri, err := GetRpnInFromHTTPRequest(r) //ParseForm called
- if err != nil {
- errPage(w, http.StatusBadRequest, "invalid parameters "+err.Error())
- log.Println("ERROR bad request, err=" + err.Error())
- logRequestDebug(httputil.DumpRequest(r, true))
- return
- }
-
- ro, _ := getRpnOutByOrderId(ri.Order_id)
- ri.Leanwork = ro.Leanwork
- _, err = ri.add2db() //TODO:check error add
- if err != nil {
- log.Printf("failed to add rpnIn %+v , error is %s", ri, err.Error())
- logRequestDebug(httputil.DumpRequest(r, true))
- }
- fmt.Fprintf(w, "[SUCCESS]")
-
- //start informing leanwork in separate thread, maximum 5 retry, interval 5 minutes
- go startLeanworkCallBack(ri)
- return
- }
-
- //receive RPN user name and card number
- func rpnNameAndCard(w http.ResponseWriter, r *http.Request) {
- if r.Method != "POST" {
- log.Println("ERROR collecting Name and Card Number,not HTTP POST")
- logRequestDebug(httputil.DumpRequest(r, true))
- errPage(w, http.StatusMethodNotAllowed, "invalid request")
- return
- }
- r.ParseForm()
- id := r.FormValue("id")
- sign := r.FormValue("sign")
- user_name := r.FormValue("name")
- user_card := r.FormValue("card")
- rpn_type := r.FormValue("rpnType")
-
- if !(id != "" && sign != "" && user_name != "" && user_card != "") {
- errPage(w, http.StatusBadRequest, "missing parameters")
- log.Printf("WARNING collecting Name and Card Number, require non-empty value, id=%s, sign=%s, user_name=%s, user_card=%s\n", id, sign, user_name, user_card)
- return
- }
-
- row, err := getRequestRowByIdAndSign(id, sign)
- if err != nil {
- errPage(w, http.StatusBadRequest, "bad parameters")
- log.Printf("WARNING: collecting Name and Card Number, signature not correct %+f\n", r.Form)
- return
- }
-
- ro := RpnOut{}
- ro.Ip4 = getClientIPLong(r)
- ro.Leanwork = row.Id
- if rpn_type == "rpnp2p" {
- ro.buildReqByLeanworkINP2P(row, user_name, user_card)
- } else {
- ro.buildReqByLeanworkINFAT(row, user_name, user_card)
- }
- //create db record
- db.addRpnOut(ro)
-
- //build rpn redirect page and send it
- ro.sendRedirect(w, row)
- }
|