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 }