pay.go 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. package model
  2. import (
  3. "leafstalk/otherutils/deepcopy"
  4. "strconv"
  5. "time"
  6. "xorm.io/xorm"
  7. )
  8. // 支付状态
  9. const (
  10. PayStateNo = 0 // 未支付
  11. PayStateNotify = 1 // 已通知
  12. PayStatePayed = 2 // 已支付
  13. PayStateCancle = 3 // 已取消
  14. PayStateItemError = 4 // 购买的道具不对
  15. )
  16. // 扣款状态
  17. const (
  18. DeductStateNo = 0
  19. DeductStateSucess = 1
  20. DeductStateUnKnown = 2
  21. DeductStateFail = 3
  22. )
  23. // 发货状态
  24. const (
  25. DeliverStateNo = 0 //未发货
  26. DeliverStateSending = 1 // 发货中
  27. DeliverStateSucess = 2 // 已发货
  28. DeliverStateSucessMail = 3 // 已发货 邮件
  29. DeliverStateFail = 4
  30. DeliverStateExcept = 5
  31. )
  32. const (
  33. PayMethodForbid = 0 // 禁止
  34. PayMethodNormal = 1 // 正常
  35. PayMethodClientService = 2 // 客服
  36. )
  37. const (
  38. PhoneAndroid = 1 // 安卓
  39. PhoneIos = 2 // 苹果
  40. )
  41. type TraceState struct {
  42. QueryTs int64
  43. PayMethod int
  44. }
  45. type PayPlayer struct {
  46. Id int64
  47. PlayerId int64 `xorm:"BIGINT index 'playerid'"`
  48. OpenId string `xorm:"varchar(255) 'openId'"`
  49. GdtVid string `xorm:"varchar(255) 'gdtVid'"`
  50. GateId int64 `xorm:"varchar(255) 'gateId'"`
  51. AdSrc string `xorm:"varchar(255) 'adSrc'"`
  52. SessionKey string `xorm:"varchar(255) 'sessionKey'"`
  53. TraceOrders map[string]*TraceState `xorm:"text 'traceOrders'"` // 游戏内订单 //最近支付订单 不用保存太多,最多50笔
  54. IP string `xorm:"varchar(50) 'ip'"`
  55. // Friends []int64 `xorm:"-"`
  56. // GameOutOrders map[string]int64 `xorm:"text 'outOrders'"` // 游戏外订单
  57. }
  58. func (m *PayPlayer) TableName() string {
  59. return "pay_player"
  60. }
  61. func (m *PayPlayer) QueryExist(eng *xorm.Engine) (bool, error) {
  62. q := new(PayPlayer)
  63. q.PlayerId = m.PlayerId
  64. return eng.Exist(q)
  65. }
  66. func (m *PayPlayer) UpdateDB(eng *xorm.Engine) (int64, error) {
  67. return eng.Where("playerid=?", m.PlayerId).AllCols().Update(m)
  68. }
  69. func (m *PayPlayer) GetUniqueKey() string {
  70. //return m.PlayerID
  71. return strconv.FormatInt(m.PlayerId, 10)
  72. }
  73. func CopyPayPlayer(old *PayPlayer) *PayPlayer {
  74. new1 := deepcopy.MustCopy(old).(*PayPlayer)
  75. return new1
  76. }
  77. // //0:苹果游戏外微信支付 1:安卓游戏内支付 2:安卓游戏外微信支付 3:苹果游戏内支付
  78. // 订单信息
  79. type NewPayOrder struct {
  80. Id int64
  81. PlayerId int64 `xorm:"BIGINT index 'playerid'"`
  82. Platform string `xorm:"varchar(10) 'platform'"`
  83. GoodsId int64 `xorm:"BIGINT 'goodsId'"`
  84. OutTradeNo string `xorm:"varchar(255) index 'outTradeNo'"`
  85. PayMethod int `xorm:"int 'method'"` //支付方式 1:虚拟支付 2:游戏外支付
  86. PhoneType int64 `xorm:"int 'phone'"` // 1: 安卓; 2: 苹果
  87. OpenId string `xorm:"varchar(255) 'openId'"`
  88. PayState int `xorm:"int 'payState'"` //支付状态 未支付 已通知 已支付
  89. DeductState int `xorm:"int 'deductState'"` //扣费状态
  90. DeliverState int `xorm:"int 'deliverState'"` //发货状态
  91. Price int64 `xorm:"BIGINT 'price'"`
  92. CreateTime time.Time `xorm:"created"`
  93. QueryPayCount int64 `xorm:"-"` // 查询支付结果次数
  94. LastQueryTs int64 `xorm:"BIGINT 'lastQueryTs'"` // 查询支付服务的时间戳
  95. }
  96. func (m *NewPayOrder) TableName() string {
  97. return "newpayorder"
  98. }
  99. func (m *NewPayOrder) QueryExist(eng *xorm.Engine) (bool, error) {
  100. q := new(NewPayOrder)
  101. q.OutTradeNo = m.OutTradeNo
  102. return eng.Exist(q)
  103. }
  104. func (m *NewPayOrder) UpdateDB(eng *xorm.Engine) (int64, error) {
  105. return eng.Where("outTradeNo=?", m.OutTradeNo).MustCols("state").Update(m)
  106. }
  107. func (m *NewPayOrder) GetUniqueKey() string {
  108. return m.OutTradeNo
  109. }
  110. func CopyWxPayOrder(old *NewPayOrder) *NewPayOrder {
  111. new1 := deepcopy.MustCopy(old).(*NewPayOrder)
  112. //*new1 = *old
  113. return new1
  114. }
  115. // 微信订单
  116. type VirtualPayOrder struct {
  117. Id int64
  118. PlayerId int64 `xorm:"BIGINT index 'playerId'"`
  119. GoodsId int64 `xorm:"BIGINT 'goodsId'"` // 购买物品
  120. Price int64 `xorm:"BIGINT 'price'"` //价格
  121. State int `xorm:"int 'state'"` //支付方式
  122. Platform string `xorm:"varchar(50) 'platform'"` //平台 wx:微信 tt:抖音
  123. PayMethod int `xorm:"int 'payMethod'"` //支付方式 //0:苹果游戏外微信支付 1:安卓游戏内支付 2:安卓游戏外微信支付 3:苹果游戏内支付
  124. PrePayNo string `xorm:"varchar(255) 'prePayNo'"` //预支付订单号
  125. OutTradeNo string `xorm:"varchar(255) 'outTradeNo'"` //支付订单号
  126. MchOrderNo string `xorm:"varchar(255) 'mchOrderNo'"` //商户订单号
  127. Balance int64 `xorm:"int 'balance'"` //游戏币个数(包含赠送)
  128. SaveAmt int64 `xorm:"int 'saveAmt'"` //累计充值金额的游戏币数量
  129. PresentSum int64 `xorm:"int 'presentSum'"` //历史累计收到赠送金额
  130. CreateTime time.Time `xorm:"created"`
  131. // SaveSum int64 `xorm:"int 'saveSum'"` //历史总游戏币金额
  132. // PayBalance int64 `xorm:"int 'payBalance'"` //预扣后的余额
  133. // CostSum int `xorm:"int 'costSum'"` //历史总消费游戏币金额
  134. // PresentSum int `xorm:"int 'presentSum'"` //历史累计收到赠送金额
  135. // GenBalance int `xorm:"int 'genBalance'"` //赠送游戏币数量(赠送游戏币数量
  136. // UsedGenAmt int `xorm:"int 'usedGenAmt'"` //本次扣的赠送币的金额
  137. // Operation string `xorm:"varchar(255) 'operation'"`
  138. }
  139. func (m *VirtualPayOrder) TableName() string {
  140. return "virtualpayorder"
  141. }
  142. func (m *VirtualPayOrder) QueryExist(eng *xorm.Engine) (bool, error) {
  143. q := new(VirtualPayOrder)
  144. q.OutTradeNo = m.OutTradeNo
  145. return eng.Exist(q)
  146. }
  147. // 不许修改
  148. func (m *VirtualPayOrder) UpdateDB(eng *xorm.Engine) (int64, error) {
  149. //return eng.Where("playerid=?", m.PlayerID).Update(m)
  150. return 0, nil
  151. }
  152. func (m *VirtualPayOrder) GetUniqueKey() string {
  153. return m.OutTradeNo
  154. }
  155. func CopyVirtualPayOrder(old *VirtualPayOrder) *VirtualPayOrder {
  156. new1 := deepcopy.MustCopy(old).(*VirtualPayOrder)
  157. return new1
  158. }
  159. type ItemPayOrder struct {
  160. Id int64
  161. PlayerID int64 `xorm:"BIGINT index 'playerid'"`
  162. OutTradeNo string `xorm:"varchar(255) 'outTradeNo'"`
  163. Price int64 `xorm:"BIGINT 'price'"`
  164. GoodsId int64 `xorm:"BIGINT 'goodsId'"`
  165. PayState int64 `xorm:"int 'payState'"`
  166. DeliverState int64 `xorm:"int 'deliverState'"`
  167. GameInState int64 `xorm:"int 'gameInState'"` //游戏内支付状态
  168. PayTime int64 `xorm:"BIGINT 'payTime'"`
  169. MchOrderNo string `xorm:"varchar(255) 'mchOrderNo'"`
  170. TransactionId string `xorm:"varchar(255) 'transactionId'"`
  171. CreateTime time.Time `xorm:"created"`
  172. }
  173. // IOS订单
  174. type IosPayOrder struct {
  175. Id int64
  176. PlayerId int64 `xorm:"bigint index 'playerId'"`
  177. GoodsId int64 `xorm:"BIGINT 'goodsId'"`
  178. OpenId string `xorm:"varchar(255) 'openId'"`
  179. OutTradeNo string `xorm:"varchar(100) 'outTradeNo'"`
  180. Total int64 `xorm:"BIGINT 'total'"`
  181. TradeState string `xorm:"varchar(50) 'tradeState'"`
  182. TransactionId string `xorm:"varchar(255) 'transactionId'"`
  183. PayerTotal int64 `xorm:"BIGINT 'payerTotal'"`
  184. SuccessTime string `xorm:"varchar(255) 'successTime'"`
  185. PrepayId string `xorm:"varchar(255) 'prepayId'"`
  186. DeliverState int `xorm:"int default(0) 'deliver'"`
  187. CreateTime time.Time `xorm:"created" redis:"-"`
  188. Platform string `xorm:"varchar(50) 'platform'"` // 微信; 抖音:
  189. PhoneType int64 `xorm:"int 'phone'"` //1:安卓手机; 2: 苹果手机
  190. PayUrl string `xorm:"-"`
  191. // GateId int `xorm:"int 'gateId'"` //支付完,客户端查询时设置
  192. // QueryPayCount int64 `xorm:"-"` // 查询支付结果次数
  193. // LastQueryTs int64 `xorm:"BIGINT 'lastQueryTs'"` // 查询支付服务的时间戳
  194. // LastQueryThirdTs int64 `xorm:"-"`
  195. // Level int `xorm:"-"`
  196. }
  197. func (order IosPayOrder) TableName() string {
  198. return "wxpay_iosorder"
  199. }
  200. func (m *IosPayOrder) QueryExist(eng *xorm.Engine) (bool, error) {
  201. q := new(IosPayOrder)
  202. q.OutTradeNo = m.OutTradeNo
  203. return eng.Exist(q)
  204. }
  205. func (m *IosPayOrder) UpdateDB(eng *xorm.Engine) (int64, error) {
  206. return eng.Where("outTradeNo=?", m.OutTradeNo).Cols("tradeState", "transactionId", "payerTotal", "successTime", "state").Update(m)
  207. }
  208. func (m *IosPayOrder) GetUniqueKey() string {
  209. return m.OutTradeNo
  210. }
  211. func CopyIosPayOrder(old *IosPayOrder) *IosPayOrder {
  212. new1 := deepcopy.MustCopy(old).(*IosPayOrder) //new(IosPayOrder)
  213. // *new1 = *old
  214. return new1
  215. }
  216. type PlayerPayNotify struct {
  217. PlayerId int64
  218. GateId int64
  219. Platform string
  220. OutTradeNo string
  221. SysCDRP *CDRP
  222. PayMethod int
  223. ToMail int // 1: 邮箱中; 0: 背包中
  224. }
  225. // priceId int64, , outTradeNo string, sysCDRP *CDRP
  226. func NewPlayerPayNotify(playerId int64, gateId int64, plat string) *PlayerPayNotify {
  227. payNotify := new(PlayerPayNotify)
  228. payNotify.PlayerId = playerId
  229. payNotify.GateId = gateId
  230. payNotify.Platform = plat
  231. return payNotify
  232. }
  233. func (p *PlayerPayNotify) SetOrderInfo(outTradeNo string, payMethod int, sysCDRP *CDRP) {
  234. // p.PriceId = priceId
  235. p.OutTradeNo = outTradeNo
  236. p.SysCDRP = sysCDRP
  237. p.PayMethod = payMethod
  238. }
  239. func (p *PlayerPayNotify) GetPayPointId() int64 {
  240. return p.SysCDRP.Uid
  241. }
  242. // 玩家发货通知
  243. type OrderDeliverResult struct {
  244. ErrCode int // 见 model.DeliverStateFail
  245. PlayerId int64
  246. GateId int64
  247. OutTradeNo string
  248. PayMethod int
  249. }
  250. // const (
  251. // DeliverResultNormal = 0
  252. // DeliverResultError = 1
  253. // DeliverResultExcept = 2
  254. // )
  255. func NewOrderDeliverResult(payNotify *PlayerPayNotify) *OrderDeliverResult {
  256. return &OrderDeliverResult{
  257. PlayerId: payNotify.PlayerId,
  258. GateId: payNotify.GateId,
  259. OutTradeNo: payNotify.OutTradeNo,
  260. }
  261. }