@@ -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() | |||
@@ -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"` | |||
} |
@@ -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::专门给解密支付宝手机号 | |||