94 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			94 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 
								 | 
							
								package coingate
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import (
							 | 
						||
| 
								 | 
							
									"errors"
							 | 
						||
| 
								 | 
							
									"fmt"
							 | 
						||
| 
								 | 
							
									"go-admin/common/global"
							 | 
						||
| 
								 | 
							
									"go-admin/common/helper"
							 | 
						||
| 
								 | 
							
									"go-admin/config"
							 | 
						||
| 
								 | 
							
									"go-admin/models/coingatedto"
							 | 
						||
| 
								 | 
							
									"io/ioutil"
							 | 
						||
| 
								 | 
							
									"net/http"
							 | 
						||
| 
								 | 
							
									"strings"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									"github.com/bytedance/sonic"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									log "github.com/go-admin-team/go-admin-core/logger"
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								获取支付连接
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  - @endPoint basic url
							 | 
						||
| 
								 | 
							
								  - @token api 密钥
							 | 
						||
| 
								 | 
							
								  - @req 请求参数
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								func GetPaymentUrl(endPoint string, token string, req *coingatedto.OrderRequest) (resp coingatedto.OrderResponse, err error) {
							 | 
						||
| 
								 | 
							
									method := "POST"
							 | 
						||
| 
								 | 
							
									url := fmt.Sprintf("%s%s", endPoint, "/v2/orders")
							 | 
						||
| 
								 | 
							
									payload, err := sonic.Marshal(req)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										return
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									client := &http.Client{}
							 | 
						||
| 
								 | 
							
									err = helper.CreateHtppProxy("", config.ExtConfig.ProxyUrl, client)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										return
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									request, err := http.NewRequest(method, url, strings.NewReader(string(payload)))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										fmt.Println(err)
							 | 
						||
| 
								 | 
							
										return
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									request.Header.Add("Authorization", fmt.Sprintf("Bearer %s", token))
							 | 
						||
| 
								 | 
							
									request.Header.Add("Content-Type", "application/json")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									res, err := client.Do(request)
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										return
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									defer res.Body.Close()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									body, err := ioutil.ReadAll(res.Body)
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										return
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if res.StatusCode != http.StatusOK {
							 | 
						||
| 
								 | 
							
										log.Error("status:", res.Status, "获取支付失败:", string(body))
							 | 
						||
| 
								 | 
							
										err = errors.New("获取支付连接失败,status:" + res.Status)
							 | 
						||
| 
								 | 
							
										return
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									err = sonic.Unmarshal(body, &resp)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									return
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								支付回调
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								func CallBack(req *coingatedto.OrderCallBackResponse) error {
							 | 
						||
| 
								 | 
							
									switch req.Status {
							 | 
						||
| 
								 | 
							
									case global.COINGATE_STATUS_NEW:
							 | 
						||
| 
								 | 
							
									case global.COINGATE_STATUS_PENDING:
							 | 
						||
| 
								 | 
							
									case global.COINGATE_STATUS_CONFIRMING:
							 | 
						||
| 
								 | 
							
									case global.COINGATE_STATUS_PAID:
							 | 
						||
| 
								 | 
							
									case global.COINGATE_STATUS_INVALID:
							 | 
						||
| 
								 | 
							
									case global.COINGATE_STATUS_EXPIRED:
							 | 
						||
| 
								 | 
							
									case global.COINGATE_STATUS_CANCELED:
							 | 
						||
| 
								 | 
							
									case global.COINGATE_STATUS_REFUNDED:
							 | 
						||
| 
								 | 
							
									case global.COINGATE_STATUS_PARTIALLY_REFUNDED:
							 | 
						||
| 
								 | 
							
									default:
							 | 
						||
| 
								 | 
							
										errStr := fmt.Sprintf("支付回调未找到状态%s", req.Status)
							 | 
						||
| 
								 | 
							
										log.Error(errStr)
							 | 
						||
| 
								 | 
							
										return errors.New(errStr)
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									return nil
							 | 
						||
| 
								 | 
							
								}
							 |