payment gateway for rpn cn
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

83 Zeilen
2.3KB

  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "net/http"
  6. "net/http/httputil"
  7. )
  8. //RPN callback us about payment result
  9. func rpnNotify(w http.ResponseWriter, r *http.Request) {
  10. if r.Method != "POST" {
  11. errPage(w, http.StatusMethodNotAllowed, "invalid request")
  12. log.Println("ERROR RPN request,not HTTP POST")
  13. logRequestDebug(httputil.DumpRequest(r, true))
  14. return
  15. }
  16. ri, err := GetRpnInFromHTTPRequest(r) //ParseForm called
  17. if err != nil {
  18. errPage(w, http.StatusBadRequest, "invalid parameters "+err.Error())
  19. log.Println("ERROR bad request, err=" + err.Error())
  20. logRequestDebug(httputil.DumpRequest(r, true))
  21. return
  22. }
  23. ro, _ := getRpnOutByOrderId(ri.Order_id)
  24. ri.Leanwork = ro.Leanwork
  25. _, err = ri.add2db() //TODO:check error add
  26. if err != nil {
  27. log.Printf("failed to add rpnIn %+v , error is %s", ri, err.Error())
  28. logRequestDebug(httputil.DumpRequest(r, true))
  29. }
  30. fmt.Fprintf(w, "[SUCCESS]")
  31. //start informing leanwork in separate thread, maximum 5 retry, interval 5 minutes
  32. go startLeanworkCallBack(ri)
  33. return
  34. }
  35. //receive RPN user name and card number
  36. func rpnNameAndCard(w http.ResponseWriter, r *http.Request) {
  37. if r.Method != "POST" {
  38. log.Println("ERROR collecting Name and Card Number,not HTTP POST")
  39. logRequestDebug(httputil.DumpRequest(r, true))
  40. errPage(w, http.StatusMethodNotAllowed, "invalid request")
  41. return
  42. }
  43. r.ParseForm()
  44. id := r.FormValue("id")
  45. sign := r.FormValue("sign")
  46. user_name := r.FormValue("name")
  47. user_card := r.FormValue("card")
  48. rpn_type := r.FormValue("rpnType")
  49. if !(id != "" && sign != "" && user_name != "" && user_card != "") {
  50. errPage(w, http.StatusBadRequest, "missing parameters")
  51. 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)
  52. return
  53. }
  54. row, err := getRequestRowByIdAndSign(id, sign)
  55. if err != nil {
  56. errPage(w, http.StatusBadRequest, "bad parameters")
  57. log.Printf("WARNING: collecting Name and Card Number, signature not correct %+f\n", r.Form)
  58. return
  59. }
  60. ro := RpnOut{}
  61. ro.Ip4 = getClientIPLong(r)
  62. ro.Leanwork = row.Id
  63. if rpn_type == "rpnp2p" {
  64. ro.buildReqByLeanworkINP2P(row, user_name, user_card)
  65. } else {
  66. ro.buildReqByLeanworkINFAT(row, user_name, user_card)
  67. }
  68. //create db record
  69. db.addRpnOut(ro)
  70. //build rpn redirect page and send it
  71. ro.sendRedirect(w, row)
  72. }