feat: 增加支付宝小程序获取openid接口
This commit is contained in:
parent
9108c2bce9
commit
4aa22bf346
|
@ -0,0 +1,26 @@
|
||||||
|
package front
|
||||||
|
|
||||||
|
import (
|
||||||
|
"PaymentCenter/app/constants/errorcode"
|
||||||
|
"PaymentCenter/app/http/controllers"
|
||||||
|
"PaymentCenter/app/http/entities/front"
|
||||||
|
"PaymentCenter/app/services/thirdpay"
|
||||||
|
"PaymentCenter/app/utils"
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
// 支付宝小程序获取授权,获取openId
|
||||||
|
func GetAliOauth(c *gin.Context) {
|
||||||
|
req, _ := controllers.GetRequest(c).(*front.GetAliOauthRequest)
|
||||||
|
rsp, err := thirdpay.GetAliOauth(c, *req)
|
||||||
|
if err != nil {
|
||||||
|
utils.Log(c, "GetAliOauth-获取支付宝授权失败", err.Error())
|
||||||
|
c.JSON(200, gin.H{
|
||||||
|
"code": errorcode.SystemError,
|
||||||
|
"message": err.Error(),
|
||||||
|
"data": "",
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
controllers.HandCodeRes(c, rsp, errorcode.Success)
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
package front
|
||||||
|
|
||||||
|
type GetAliOauthRequest struct {
|
||||||
|
Code string `json:"code" form:"code" validate:"required" `
|
||||||
|
PayChannelId string `json:"pay_channel_id" form:"pay_channel_id" validate:"required" `
|
||||||
|
}
|
|
@ -34,6 +34,7 @@ var FrontRequestMapBeforeDecrypt = map[string]func() interface{}{
|
||||||
|
|
||||||
common.FRONT_V1 + "/payPage/list": func() interface{} { return new(front.PayChannelListRequest) },
|
common.FRONT_V1 + "/payPage/list": func() interface{} { return new(front.PayChannelListRequest) },
|
||||||
common.FRONT_V1 + "/payPage/submit": func() interface{} { return new(front.GetPayLinkRequest) },
|
common.FRONT_V1 + "/payPage/submit": func() interface{} { return new(front.GetPayLinkRequest) },
|
||||||
|
common.FRONT_V1 + "/ali/getOauth": func() interface{} { return new(front.GetAliOauthRequest) },
|
||||||
|
|
||||||
common.WXCodeRedirectAddress: func() interface{} { return new(front.WxJsApiPayRequest) },
|
common.WXCodeRedirectAddress: func() interface{} { return new(front.WxJsApiPayRequest) },
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,6 +66,9 @@ func RegisterRoute(router *gin.Engine) {
|
||||||
v1.GET("/brokerWechatUrl", front.BrokerWechatUrl)
|
v1.GET("/brokerWechatUrl", front.BrokerWechatUrl)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 支付宝小程序获取授权,获取openId
|
||||||
|
v1.POST("/ali/getOauth", middlewares.ValidateRequest(), front.GetAliOauth)
|
||||||
|
|
||||||
// 微信获取授权相关
|
// 微信获取授权相关
|
||||||
router.LoadHTMLGlob("./front/templates/*")
|
router.LoadHTMLGlob("./front/templates/*")
|
||||||
wx := v1.Group("/wx", middlewares.ValidateRequest())
|
wx := v1.Group("/wx", middlewares.ValidateRequest())
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
package thirdpay
|
||||||
|
|
||||||
|
import (
|
||||||
|
"PaymentCenter/app/data"
|
||||||
|
"PaymentCenter/app/http/entities/front"
|
||||||
|
"PaymentCenter/app/models/paychannelmodel"
|
||||||
|
"PaymentCenter/app/third/paymentService"
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"github.com/go-pay/gopay/alipay"
|
||||||
|
"github.com/goccy/go-json"
|
||||||
|
"xorm.io/builder"
|
||||||
|
)
|
||||||
|
|
||||||
|
// 小程序支付 通过code换取网页授权access_token,openid,
|
||||||
|
func GetAliOauth(ctx context.Context, param front.GetAliOauthRequest) (result *alipay.OauthTokenInfo, err error) {
|
||||||
|
var (
|
||||||
|
has bool
|
||||||
|
payChannel = paychannelmodel.PayChannel{}
|
||||||
|
repo = data.NewPayChannelRepo(paychannelmodel.GetInstance().GetDb())
|
||||||
|
)
|
||||||
|
|
||||||
|
// 获取支付渠道的配置
|
||||||
|
has, err = repo.PayChannelGet(&payChannel, builder.Eq{"id": param.PayChannelId})
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
} else if !has {
|
||||||
|
err = fmt.Errorf("获取支付渠道不存在")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 配置支付的解析
|
||||||
|
aliConfig := paymentService.AliPay{}
|
||||||
|
err = json.Unmarshal([]byte(payChannel.ExtJson), &aliConfig)
|
||||||
|
if err != nil {
|
||||||
|
err = fmt.Errorf("解析支付渠道配置失败")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 支付宝,获取小程序 授权信息 ,openid
|
||||||
|
result, err = paymentService.ALiGetOpenId(ctx, aliConfig, param.Code)
|
||||||
|
return
|
||||||
|
}
|
|
@ -399,3 +399,24 @@ func ALiJsApiPayInfo(c context.Context, payOrderRequest PayOrderRequest) (string
|
||||||
|
|
||||||
return aliRsp.Response.TradeNo, nil
|
return aliRsp.Response.TradeNo, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 支付宝,获取小程序 授权信息 ,openid
|
||||||
|
func ALiGetOpenId(c context.Context, ali AliPay, authToken string) (result *alipay.OauthTokenInfo, err error) {
|
||||||
|
// 初始化支付宝客户端
|
||||||
|
aliClient, err := AliInitClient(ali)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 取得 user_id 和 token(授权令牌)。
|
||||||
|
//请求参数
|
||||||
|
bm := make(gopay.BodyMap)
|
||||||
|
bm.Set("grant_type", "authorization_code")
|
||||||
|
bm.Set("code", authToken)
|
||||||
|
oauthRsp, err := aliClient.SystemOauthToken(c, bm)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
return oauthRsp.Response, nil
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue