entrust.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package wechat
  2. import "encoding/xml"
  3. // Entrust 申请签约
  4. type Entrust struct {
  5. XMLName xml.Name `xml:"xml"`
  6. AppID string `xml:"appid"`
  7. MchID string `xml:"mch_id"`
  8. PlanID string `xml:"plan_id"` // 协议模板id
  9. ContractCode string `xml:"contract_code"` // 签约协议号
  10. RequestSerial int64 `xml:"request_serial"` // 商户请求签约时的序列号,要求唯一性。序列号主要用于排序,不作为查询条件
  11. Name string `xml:"contract_display_account"` // 签约用户的名称
  12. NotifyURL string `xml:"notify_url"` // 接受扣款结果异步回调通知的url,传输需要url encode
  13. //Ver string `xml:"ver"` // 版本号, 固定值1.0
  14. Sign string `xml:"sign"` // 签名
  15. Timestamp int `xml:"timestamp"` // 时间戳, 10位时间戳
  16. IP string `xml:"clientip"` // 用户客户端的真实IP地址
  17. // ReturnWeb int `xml:"return_web"` // 1表示返回签约页面的referrer url, 不填或获取不到referrer则不返回; 跳转referrer url时会自动带上参数from_wxpay=1
  18. }
  19. // H5Entrust H5纯签约
  20. func H5Entrust(config WePayConfig, order Entrust) (reply WePayReply, err error) {
  21. m := make(map[string]interface{})
  22. m["appid"] = order.AppID
  23. m["mch_id"] = order.MchID
  24. m["plan_id"] = order.PlanID
  25. m["contract_code"] = order.ContractCode
  26. m["request_serial"] = order.RequestSerial
  27. m["contract_display_account"] = order.Name
  28. m["notify_url"] = order.NotifyURL
  29. m["ver"] = `1.0`
  30. m["timestamp"] = order.Timestamp
  31. m["clientip"] = order.IP
  32. var data []byte
  33. order.Sign = Sign(m, config.Key)
  34. if data, err = xml.Marshal(order); err != nil {
  35. return
  36. }
  37. reply, err = post(WePayHost+WePayURLPapayEntrust, data)
  38. return
  39. }