| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- package pay
- import (
- "crypto/md5"
- "strings"
- "github.com/silenceper/wechat/context"
- "github.com/silenceper/wechat/util"
- )
- var payGateway := "https://api.mch.weixin.qq.com/pay/unifiedorder"
- // Pay struct extends context
- type Pay struct {
- *context.Context
- }
- // PayParams was NEEDED when request unifiedorder
- type PayParams struct {
- TotalFee string
- CreateIP string
- Body string
- OutTradeNo string
- }
- type PayResult struct {
- Success bool
- PrePayID string
- }
- //PayRequest
- type payRequest struct {
- AppID string `xml:"appid"`
- MchID string `xml:"mch_id"`
- NotifyUrl string `xml:"notify_url"` //通知地址
- DeviceInfo string `xml:"device_info,omitempty"`
- NonceStr string `xml:"nonce_str"`
- Sign string `xml:"sign"`
- SignType string `xml:"sign_type,omitempty"`
- Body string `xml:"body"`
- Detail string `xml:"detail,omitempty"`
- Attach string `xml:"attach,omitempty"` //附加数据
- OutTradeNo string `xml:"out_trade_no"` //商户订单号
- FeeType string `xml:"fee_type,omitempty"` //标价币种
- TotalFee string `xml:"total_fee"` //标价金额
- SpbillCreateIp string `xml:"spbill_create_ip"` //终端IP
- TimeStart string `xml:"time_start,omitempty"` //交易起始时间
- TimeExpire string `xml:"time_expire,omitempty"` //交易结束时间
- GoodsTag string `xml:"goods_tag,omitempty"` //订单优惠标记
- TradeType string `xml:"trade_type"` //交易类型
- ProductId string `xml:"product_id,omitempty"` //商品ID
- LimitPay string `xml:"limit_pay,omitempty"` //
- OpenID string `xml:"openid,omitempty"` //用户标识
- SceneInfo string `xml:"scene_info,omitempty"` //场景信息
- }
- type payResponse struct {
-
- }
- // NewPay return an instance of Pay package
- func NewPay(ctx *context.Context) *Pay {
- pay := Pay{Context: ctx}
- return &pay
- }
- // PrePayId will request wechat merchant api and request for a pre payment order id
- func (pcf *Pay) PrePayId(p *PayParams) payResult *PayResult {
- nonceStr := util.RandomStr(32)
- pType = "JSAPI"
- template := "appid=%s&body=%s&mch_id=%s&nonce_str=%s¬ify_url=%s&out_trade_no=%s&spbill_create_ip=%s&total_fee=%s&trade_type"
- stringA := fmt.Sprintf(template, pcf.AppID, p.Body, pcf.MchID, nonceStr, pcf.NotifyUrl, p.OutTradeNo, p.CreateIP, p.TotalFee, pType)
- signature := md5.Sum(stringA + pcf.PayKey)
- sign := strings.ToUpper(signature)
- request := payRequest{
- AppID: pcf.AppID,
- MchID: pcf.MchID,
- NotifyUrl: pcf.NotifyUrl,
- NonceStr: util.RandomStr(32),
- Sign: sign,
- Body: p.Body,
- OutTradeNo: p.OutTradeNo,
- TotalFee: p.TotalFee,
- SpbillCreateIp: params.CreateIP,
- OpenID: params.OpenID,
- }
- ret, err := util.PostXML(payGateway, request)
- if err != nil {
- }
- fmt.Println(string(ret))
- }
|