payment gateway for rpn cn
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

83 lignes
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. }