Browse Source

add 合单支付

tmp
dengbiao 5 months ago
parent
commit
6b5cee4f39
3 changed files with 98 additions and 22 deletions
  1. +59
    -3
      app/customer/hdl/hdl_demo.go
  2. +38
    -19
      app/lib/wechatpay/services/partnerpayments/jsapi/models.go
  3. +1
    -0
      app/router/customer_router.go

+ 59
- 3
app/customer/hdl/hdl_demo.go View File

@@ -9,6 +9,9 @@ import (
"applet/app/db/model"
"applet/app/e"
"applet/app/enum"
"applet/app/lib/wechatpay/core"
"applet/app/lib/wechatpay/services/certificates"
"applet/app/lib/wechatpay/services/partnerpayments/jsapi"
svc3 "applet/app/svc"
"applet/app/utils"
"context"
@@ -16,9 +19,6 @@ import (
"github.com/chromedp/chromedp"
"github.com/chromedp/chromedp/device"
"github.com/gin-gonic/gin"
"applet/app/lib/wechatpay/core"
"applet/app/lib/wechatpay/services/certificates"
"applet/app/lib/wechatpay/services/partnerpayments/jsapi"
"io/ioutil"
"strconv"
"time"
@@ -148,6 +148,62 @@ func WxPay(c *gin.Context) {
return
}

func WxCombineTransactionsPay(c *gin.Context) {
client, err := svc3.NewWxPayClient(c)
if err != nil {
e.OutErr(c, e.ERR, err.Error())
return
}
wxSvc := jsapi.JsapiCombineTransactionsApiService{Client: client}
sysCfgDb := db.SysCfgDb{}
sysCfgDb.Set()
sysCfg := sysCfgDb.SysCfgFindWithDb(enum.WxSpAppId, enum.WxSpMchId, enum.WxAppletAppId, enum.WxMchId)

outTradeNo := strconv.FormatInt(time.Now().Unix(), 10)
resp, result, err := wxSvc.Prepay(c,
jsapi.CombineTransactionsPrepayRequest{
CombineAppid: core.String(sysCfg[enum.WxSpAppId]),
CombineOutTradeNo: core.String(outTradeNo),
CombineMchid: core.String(sysCfg[enum.WxSpMchId]),
SceneInfo: nil,
CombinePayerInfo: &jsapi.CombinePayerInfo{
SubOpenid: core.String("o0mnM4nlX9W5HXbagffM9eTDHaPo"),
},
SubOrders: &[]jsapi.SubOrders{
jsapi.SubOrders{
Mchid: core.String(sysCfg[enum.WxSpMchId]),
Attach: core.String("自定义数据说明"),
Amount: &struct {
// 订单总金额,单位为分
TotalAmount *int64 `json:"total_amount"`
// CNY:人民币,境内商户号仅支持人民币。
Currency *string `json:"currency,omitempty"`
}{
Currency: core.String("CNY"),
TotalAmount: core.Int64(100),
},
OutTradeNo: core.String(outTradeNo + "_1"),
SubMchid: core.String(sysCfg[enum.WxMchId]),
Detail: "",
Description: core.String("腾讯充值中心-QQ会员充值"),
SettleInfo: nil,
},
},
NotifyUrl: core.String("https://www.weixin.qq.com/wxpay/pay.php"),
LimitPay: nil,
},
)
if err != nil {
// 处理错误
e.OutErr(c, e.ERR, err.Error())
return
} else {
// 处理返回结果
println("status=%d resp=%s", result.Response.StatusCode, resp)
}
return
}

func Demo(c *gin.Context) {
sysCfgDb := db.SysCfgDb{}
sysCfgDb.Set()


+ 38
- 19
app/lib/wechatpay/services/partnerpayments/jsapi/models.go View File

@@ -1094,7 +1094,6 @@ func (o StoreInfo) Clone() *StoreInfo {
return &ret
}


// CombineTransactionsPrepayRequest
type CombineTransactionsPrepayRequest struct {
// 【合单商户Appid】 合单发起方的Appid
@@ -1102,27 +1101,47 @@ type CombineTransactionsPrepayRequest struct {
// 【合单商户订单号】 合单支付总订单号,最短2个字符,最长32个字符,只能是数字、大小写字母,以及_-|* ,且在同一个商户号下唯一
CombineOutTradeNo *string `json:"combine_out_trade_no"`
// 【合单商户号】 合单发起方商户号
CombineMchid *string `json:"combine_mchid"`
SceneInfo *SceneInfo `json:"scene_info,omitempty"`

// 商品描述
Description *string `json:"description"`
// 商户订单号
OutTradeNo *string `json:"out_trade_no"`
CombineMchid *string `json:"combine_mchid"`
SceneInfo *SceneInfo `json:"scene_info,omitempty"`
CombinePayerInfo *CombinePayerInfo `json:"combine_payer_info"`
SubOrders *[]SubOrders `json:"sub_orders"`
// 【交易起始时间】 订单生效时间,按照rfc3339格式,格式为yyyy-MM-DDTHH:mm:ss+TIMEZONE,yyyy-MM-DD表示年月日,T出现在字符串中,表示time元素的开头,HH:mm:ss表示时分秒,TIMEZONE表示时区(+08:00表示东八区时间,领先UTC8小时,即北京时间)如 2018-06-08T10:34:56+08:00 代表,北京时间2018年06月08日10时34分56秒。
Timetart *string `json:"time_start,omitempty"`
// 订单失效时间,格式为rfc3339格式
TimeExpire *time.Time `json:"time_expire,omitempty"`
// 附加数据
Attach *string `json:"attach,omitempty"`
// 有效性:1. HTTPS;2. 不允许携带查询串。
NotifyUrl *string `json:"notify_url"`
// 商品标记,代金券或立减优惠功能的参数。
GoodsTag *string `json:"goods_tag,omitempty"`
// 商户订单号
// 指定支付方式
LimitPay []string `json:"limit_pay,omitempty"`
// 传入true时,支付成功消息和支付详情页将出现开票入口。需要在微信支付商户平台或微信公众平台开通电子发票功能,传此字段才可生效。
SupportFapiao *bool `json:"support_fapiao,omitempty"`
Amount *Amount `json:"amount"`
Payer *Payer `json:"payer"`
Detail *Detail `json:"detail,omitempty"`
SettleInfo *SettleInfo `json:"settle_info,omitempty"`
}
}

// 【子单信息】 子单列表,最多支持子单条数:50。
type SubOrders struct {
// 【子单商户号】 子单发起方商户号,与发起方Appid有绑定关系
Mchid *string `json:"mchid"`
Attach *string `json:"attach"`
Amount *struct {
// 订单总金额,单位为分
TotalAmount *int64 `json:"total_amount"`
// CNY:人民币,境内商户号仅支持人民币。
Currency *string `json:"currency,omitempty"`
} `json:"amount"`
//【子单商户订单号】 商户系统内部订单号,最短2个字符,最长32个字符,只能是数字、大小写字母_-|* ,且在同一个商户号下唯一。
OutTradeNo *string `json:"out_trade_no"`
// 子商户的商户号,由微信支付生成并下发
SubMchid *string `json:"sub_mchid"`
// 【商品详情】 商品详细描述
Detail string `json:"detail,omitempty"`
// 商品描述
Description *string `json:"description"`
SettleInfo *SettleInfo `json:"settle_info,omitempty"`
}

// 【支付者】 支付者信息,可以指定用户的实名信息,必须指定用户的openid或sub_openid。
type CombinePayerInfo struct {
// 【用户标识】 使用合单Appid获取的对应用户Openid。是用户在商户Appid下的唯一标识。
Openid *string `json:"openid,omitempty"`
// 【用户子标识】 服务商模式下,使用某个子商户的Appid获取的对应用户Openid,是用户在该子商户Appid下的唯一标识。openid和sub_openid可以选传其中之一,如果选择传sub_openid,则必须传sub_appid。
SubOpenid *string `json:"sub_openid,omitempty"`
}

+ 1
- 0
app/router/customer_router.go View File

@@ -32,6 +32,7 @@ func CustomerInit(r *gin.RouterGroup) {
r.POST("/wxDecryptUserInfo", hdl.WxDecryptUserInfo)
r.POST("/wxDecryptMobile", hdl.WxDecryptMobile)
r.POST("/wxPay", hdl.WxPay)
r.POST("/wxCombineTransactionsPay", hdl.WxCombineTransactionsPay)

r.POST("/register", hdl.Register)
r.POST("/aesDecrypt", hdl.AesDecrypt) //TODO::专门给解密支付宝手机号


Loading…
Cancel
Save