• wangp's avatar
    lakala · af1afef6
    wangp authored
    af1afef6
notice.go 5.19 KB
package pay

import (
	"database/sql"
	"encoding/json"
	"fmt"
	"system_pay/controller/base"
	"system_pay/models"
	"system_pay/mysql"
)

// 拉卡拉微信支付回调 - AliPayNotice
func WxNotice(input *models.WxNoticeInput) (*base.ResponseDataWxNotice, error) {

	fmt.Println("拉卡拉微信回调输入参数")
	fmt.Println(input)

	response := new(base.ResponseDataWxNotice)

	//db, err := mysql.NewShopConn()
	//if err != nil {
	//	response.Code = "FAIL"
	//	response.Message = "参数格式校验错误"
	//	return response, err
	//}

	// 插入数据库
	db, err := mysql.NewPayConn()
	if err != nil {
		return response, err
	}

	tx, err := db.Begin()
	if err != nil {
		return response, err
	}

	defer mysql.CloseTx(tx, err)

	fmt.Println("111")

	//1.订单存在check
	var billID int64
	var attach, url string
	err = db.QueryRow("select ifnull(id, 0), attach, notify_pay_url from system_pay_bill where payment_order_code = ?",
		input.OutOrderNo).Scan(&billID, &attach, &url)
	if err != nil || billID == 0 || billID == 2 {
		response.Code = "FAIL"
		response.Message = "db operation fail1"
		return response, err
	}

	fmt.Println("222")

	//if noticeRequest.ReturnCode == "SUCCESS" {

		// 把订单状态置为 结算成功
		err = BillPayStateSuccess(tx, billID)
		if err != nil {
			//beego.Error("微信回调, 根据订单id 把订单置为结算成功 失败: ", err)
			//response.ReturnCode = "FAIL"
			//response.ReturnMsg = "db operation fail"
			//return response, nil
			response.Code = "FAIL"
			response.Message = "db operation fail2"
			InsertPayBillDetailNoticeResponseBody(tx, billID, response)
			return response, err
		}
	//} else {
	//
	//	// 把订单状态置为 结算失败
	//	err = repository.BillPayStateFail(tx, billID)
	//	if err != nil {
	//		beego.Error("微信回调, 根据订单id 把订单置为结算成功 失败: ", err)
	//		response.ReturnCode = "FAIL"
	//		response.ReturnMsg = "db operation fail"
	//		return response, nil
	//	}
	//}

	//2.存入 notice_request_body
	err = InsertPayBillDetailNoticeRequestBody(tx, billID, input)
	if err != nil {
		//beego.Error("微信回调, 根据订单id 插入回调Request参数 失败: ", err)
		response.Code = "FAIL"
		response.Message = "db operation fail3"
		InsertPayBillDetailNoticeResponseBody(tx, billID, response)
		return response, err
	}

	fmt.Println("333")

	//3.拉卡拉订收银台订单查询 - check todo

	//3.存入 notice_response_body
	//err = InsertPayBillDetailNoticeResponseBody(billID, response)
	//if err != nil {
	//	beego.Error("微信回调, 根据订单id 插入回调Response参数 失败: ", err)
	//	response.ReturnCode = "FAIL"
	//	response.ReturnMsg = "db operation fail"
	//	return err
	//}

	//beego.Info("回调成功 订单成功")

	//type CallbackResponse struct {
	//	OutTradeNo    string `json:"out_trade_no"`   // 订单号
	//	ReturnMsg     string `json:"return_msg"`     // 是否成功
	//	AttachInfo    string `json:"attach_info"`    // 附加信息
	//	TransactionID string `json:"transaction_id"` // 微信支付订单号
	//	TradeNo       string `json:"trade_no"`       // 支付宝交易流水号
	//}

	if url != "" {
		//4.回调业务方「回调函数」
		callbackResponse := new(models.CallbackResponse)
		callbackResponse.ReturnMsg = "SUCCESS"
		//callbackResponse.OutTradeNo = input.OutTradeNo
		//callbackResponse.TransactionID = input.TransactionId
		callbackResponse.OutTradeNo = input.OutOrderNo //交易凭据单号 todo
		callbackResponse.TransactionID = input.OutOrderNo //交易凭据单号 todo strconv.Itoa(

		attachMap := make(map[string]interface{}, 0)
		_ = json.Unmarshal([]byte(attach), &attachMap)
		if attachMap["store_sn"].(string) == "" {
			callbackResponse.AttachInfo = attachMap["old_attach"].(string)
		} else {
			callbackResponse.AttachInfo = attach  //商户订单号(谛宝多多)
		}

		go callBackBusinessService(input.OutOrderNo, url, callbackResponse)
		fmt.Println("444")
	}

	response.Code = "SUCCESS"
	response.Message = "执行成功"
	InsertPayBillDetailNoticeResponseBody(tx, billID, response)
	return response, nil
}

// InsertPayBillDetailNoticeRequestBody is 插入支付订单详情表中的 下单参数字段 notice_request_body
func InsertPayBillDetailNoticeRequestBody(tx *sql.Tx, billID int64, noticeRequestBody interface{}) error {

	body, err := json.Marshal(noticeRequestBody)
	if err != nil {
		return err
	}
	insertPayBillDetailSQL := `update system_pay_bill_detail set notice_request_body = ? where pay_bill_id = ?`
	result, err := tx.Exec(insertPayBillDetailSQL, string(body), billID)
	if err != nil {
		return err
	}

	_, err = result.RowsAffected()
	if err != nil {
		return err
	}
	return nil
}

// InsertPayBillDetailNoticeResponseBody is 插入支付订单详情表中的 下单参数字段 notice_response_body
func InsertPayBillDetailNoticeResponseBody(tx *sql.Tx, billID int64, noticeResponseBody interface{}) error {

	body, err := json.Marshal(noticeResponseBody)
	if err != nil {
		return err
	}
	insertPayBillDetailSQL := `update system_pay_bill_detail set notice_response_body = ? where pay_bill_id = ?`
	result, err := tx.Exec(insertPayBillDetailSQL, string(body), billID)
	if err != nil {
		return err
	}

	_, err = result.RowsAffected()
	if err != nil {
		return err
	}
	return nil
}