Commit 8fa41a45 authored by wangp's avatar wangp

拉卡拉

parent 058c4fb0
...@@ -788,33 +788,39 @@ func selectRefundBill(tx *sql.Tx, input *models.RefundParamInput) (string, strin ...@@ -788,33 +788,39 @@ func selectRefundBill(tx *sql.Tx, input *models.RefundParamInput) (string, strin
var platform_type uint8 var platform_type uint8
var source_code uint8 var source_code uint8
var notice_request interface{} var notice_request interface{}
var notice_response interface{}
var notice_request2 []byte var notice_request2 []byte
notice_request2 = []byte(`abc`) //notice_request2 = []byte(`abc`)
//payment_order_code, paymoney //payment_order_code, paymoney
selectRefundBillSQL := `select b.id, DATE_FORMAT(b.createtime, '%Y%m%d') createtime, selectRefundBillSQL := `select b.id, DATE_FORMAT(b.createtime, '%Y%m%d') createtime,
b.result_code, b.source_code, b.platform_type, bd.notice_request_body b.result_code, b.source_code, b.platform_type, bd.notice_request_body, bd.response_body
from system_pay_bill b from system_pay_bill b
left join system_pay_bill_detail bd on b.id=bd.pay_bill_id left join system_pay_bill_detail bd on b.id=bd.pay_bill_id
where b._type=0 and b.payment_order_code=?` where b._type=0 and b.payment_order_code=?`
err := tx.QueryRow(selectRefundBillSQL, input.RefundNo).Scan(&billID, &createtime, &status, &source_code, &platform_type, &notice_request2) err := tx.QueryRow(selectRefundBillSQL, input.RefundNo).Scan(&billID, &createtime, &status, &source_code, &platform_type, &notice_request2, &notice_response)
if err != nil { if err != nil {
return "", "", 0, 0, "", "", err return "", "", 0, 0, "", "", err
} }
if source_code==2 || source_code==3 || source_code==9 { if source_code==2 || source_code==3 {
//聚合扫码+聚合被扫 //聚合扫码
notice_request = new(models.ScanNoticeInput) notice_request = new(models.ScanNoticeInput)
if err := json.Unmarshal(notice_request2, &notice_request); err != nil {
return "", "", 0, 0, "", "", err
}
} else if source_code==9 {
//聚合被扫
notice_request = notice_response
} else { } else {
//聚合收银台 //聚合收银台
notice_request = new(models.CashierNoticeInput) notice_request = new(models.CashierNoticeInput)
}
if err := json.Unmarshal(notice_request2, &notice_request); err != nil { if err := json.Unmarshal(notice_request2, &notice_request); err != nil {
return "", "", 0, 0, "", "", err return "", "", 0, 0, "", "", err
} }
}
//fmt.Println(notice_request2) //fmt.Println(notice_request2)
//fmt.Println(notice_request) fmt.Println(notice_request)
fmt.Println("退款订单存在check返回值:") fmt.Println("退款订单存在check返回值:")
fmt.Println(billID) fmt.Println(billID)
fmt.Println(createtime) fmt.Println(createtime)
...@@ -839,12 +845,25 @@ func selectRefundBill(tx *sql.Tx, input *models.RefundParamInput) (string, strin ...@@ -839,12 +845,25 @@ func selectRefundBill(tx *sql.Tx, input *models.RefundParamInput) (string, strin
// 获取「对账单流水号」、「交易终端号」和「付款人账号」,退款用 // 获取「对账单流水号」、「交易终端号」和「付款人账号」,退款用
var log_no, trans_term_no, payer_account_no string var log_no, trans_term_no, payer_account_no string
if source_code==2 || source_code==3 || source_code==9 { if source_code==2 || source_code==3 {
//聚合扫码+聚合被扫 //聚合扫码
log_no = notice_request.(*models.ScanNoticeInput).LogNo log_no = notice_request.(*models.ScanNoticeInput).LogNo
if log_no=="" { if log_no=="" {
return "", "", 0, 0, "", "", errors.New("「对账单流水号」未取得错误") return "", "", 0, 0, "", "", errors.New("「对账单流水号」未取得错误")
} }
} else if source_code==9 {
//聚合被扫
//resp_data := notice_request.(map[string]interface{})["resp_data"]
//fmt.Println("resp_data返回值:", resp_data)
//if resp_data == nil {
// return "", "", 0, 0, "", "", errors.New("数据错误:resp_data返回值为空")
//}
//log_no = resp_data.(map[string]interface{})["log_no"].(string) //拉卡拉对账单流水号
log_no = "66210310187398"
//fmt.Println("log_no返回值:", log_no)
if log_no == "" {
return "", "", 0, 0, "", "", errors.New("数据错误:拉卡拉对账单流水号为空")
}
} else { } else {
//其它支付 //其它支付
// 针对有的支付,不需要传「交易终端号」时,需要用支付返回的「交易终端号」进行退款 // 针对有的支付,不需要传「交易终端号」时,需要用支付返回的「交易终端号」进行退款
...@@ -917,7 +936,7 @@ func OrderState(input *models.OrderStateInput) (interface{}, error) { ...@@ -917,7 +936,7 @@ func OrderState(input *models.OrderStateInput) (interface{}, error) {
defer mysql.CloseTx(tx, err) defer mysql.CloseTx(tx, err)
var isExist uint var isExist uint
err = tx.QueryRow(`select count(id) from pay_bill where payment_order_code = ?`, order_id).Scan(&isExist) err = tx.QueryRow(`select count(id) from system_pay_bill where payment_order_code = ?`, order_id).Scan(&isExist)
if err != nil { if err != nil {
return nil, err return nil, err
} }
...@@ -927,18 +946,18 @@ func OrderState(input *models.OrderStateInput) (interface{}, error) { ...@@ -927,18 +946,18 @@ func OrderState(input *models.OrderStateInput) (interface{}, error) {
} }
//todo 删除不需要的变量 //todo 删除不需要的变量
querySQL := `select id, source_code, result_code, payment_order_code, attach, _type from pay_bill where payment_order_code = ?` querySQL := `select id, source_code, result_code, payment_order_code, attach, _type, platform_type from system_pay_bill where payment_order_code = ?`
result := new(models.OrderState) result := new(models.OrderState)
//var result_code uint8 //var result_code uint8
var sourceCode uint var sourceCode, platformType uint
var paymentOrderCode string var paymentOrderCode string
var attach string var attach string
var billID int64 var billID int64
var billType uint8 var billType uint8
err = db.QueryRow(querySQL, order_id).Scan(&billID, &sourceCode, err = db.QueryRow(querySQL, order_id).Scan(&billID, &sourceCode,
&result.State, &paymentOrderCode, &attach, &billType) &result.State, &paymentOrderCode, &attach, &billType, &platformType)
if err != nil { if err != nil {
return nil, err return nil, err
} }
...@@ -946,7 +965,7 @@ func OrderState(input *models.OrderStateInput) (interface{}, error) { ...@@ -946,7 +965,7 @@ func OrderState(input *models.OrderStateInput) (interface{}, error) {
// 如果是 未结算成功、并且是收钱吧渠道的账单 // 如果是 未结算成功、并且是收钱吧渠道的账单
if result.State == 0 && sourceCode == 9 { //todo wangpei if result.State == 0 && sourceCode == 9 { //todo wangpei
// 查询收钱吧支付是否成功 // 查询收钱吧支付是否成功
state, err := SqbQueryOrderState(tx, paymentOrderCode, attach, billID, billType) state, err := SqbQueryOrderState(tx, paymentOrderCode, attach, billID, billType, platformType, sourceCode)
if err != nil { if err != nil {
return nil, err return nil, err
} }
...@@ -958,7 +977,7 @@ func OrderState(input *models.OrderStateInput) (interface{}, error) { ...@@ -958,7 +977,7 @@ func OrderState(input *models.OrderStateInput) (interface{}, error) {
} }
//订单状态 0: 未结算 1: 结算成功 2: 结算失败 //订单状态 0: 未结算 1: 结算成功 2: 结算失败
func SqbQueryOrderState(tx *sql.Tx, paymentOrderCode, attach string, billID int64, billType uint8) (uint8, error) { func SqbQueryOrderState(tx *sql.Tx, paymentOrderCode, attach string, billID int64, billType uint8, platformType, sourceCode uint) (uint8, error) {
fmt.Println("attachMap: ", attach) fmt.Println("attachMap: ", attach)
var attachMap map[string]interface{} var attachMap map[string]interface{}
...@@ -967,10 +986,10 @@ func SqbQueryOrderState(tx *sql.Tx, paymentOrderCode, attach string, billID int6 ...@@ -967,10 +986,10 @@ func SqbQueryOrderState(tx *sql.Tx, paymentOrderCode, attach string, billID int6
return 0, err return 0, err
} }
storeSn := attachMap["store_sn"].(string) //storeSn := attachMap["store_sn"].(string)
if storeSn == "" { //if storeSn == "" {
return 0, fmt.Errorf("参数错误") // return 0, fmt.Errorf("参数错误")
} //}
var input2 models.PlaceAnOrderParamInput var input2 models.PlaceAnOrderParamInput
//input2.SourceCode = source_code //input2.SourceCode = source_code
...@@ -979,23 +998,75 @@ func SqbQueryOrderState(tx *sql.Tx, paymentOrderCode, attach string, billID int6 ...@@ -979,23 +998,75 @@ func SqbQueryOrderState(tx *sql.Tx, paymentOrderCode, attach string, billID int6
//url := "https://test.wsmsd.cn/sit/api/v3/labs/query/tradequery" //测试 //url := "https://test.wsmsd.cn/sit/api/v3/labs/query/tradequery" //测试
//url := "https://s2.lakala.com/api/v3/labs/query/tradequery" //正式 //url := "https://s2.lakala.com/api/v3/labs/query/tradequery" //正式
url := setting.Conf.Lakala.UrlOrderState //统一退货接口 url := setting.Conf.Lakala.UrlOrderState //聚合扫码-交易查询
//todo 参数赋值 //数据重组 - start
merchant_no := ""; var merchant_no3, term_no3, merchant_no4, term_no4 string
term_no := ""; var merchant_no, term_no, version, out_org_code string
now := time.Now()
now.Add(time.Minute * 60)
date_time1 := now.Format("20060102150405")
//平台类型 1:saas 2:shop 3:shop mobile 4:收银台 6:bk_shop 7:bk_shop_mobile
if platformType==2 || platformType==3 {
// 谛宝多多自营
version = setting.Conf.Lakala.DbcVersion
out_org_code = setting.Conf.Lakala.DbcAppid
//merchant_no1 = setting.Conf.Lakala.DbcMerchantNo1
//merchant_no2 = setting.Conf.Lakala.DbcMerchantNo2
merchant_no3 = setting.Conf.Lakala.DbcMerchantNo3
term_no3 = setting.Conf.Lakala.DbcTermNo3
merchant_no4 = setting.Conf.Lakala.DbcMerchantNo4
term_no4 = setting.Conf.Lakala.DbcTermNo4
} else if platformType==6 || platformType==7 {
// 必康自营
version = setting.Conf.Lakala.BkVersion
out_org_code = setting.Conf.Lakala.BkAppid
//merchant_no1 = setting.Conf.Lakala.BkMerchantNo1
//merchant_no2 = setting.Conf.Lakala.BkMerchantNo2
merchant_no3 = setting.Conf.Lakala.BkMerchantNo3
term_no3 = setting.Conf.Lakala.BkTermNo3
merchant_no4 = setting.Conf.Lakala.BkMerchantNo4
term_no4 = setting.Conf.Lakala.BkTermNo4
} else {
// 必康医生
version = setting.Conf.Lakala.SaasVersion
out_org_code = setting.Conf.Lakala.SaasAppid
//merchant_no1 = setting.Conf.Lakala.SaasMerchantNo1
//merchant_no2 = setting.Conf.Lakala.SaasMerchantNo2
merchant_no3 = setting.Conf.Lakala.SaasMerchantNo3
term_no3 = setting.Conf.Lakala.SaasTermNo3
merchant_no4 = setting.Conf.Lakala.SaasMerchantNo4
term_no4 = setting.Conf.Lakala.SaasTermNo4
}
if sourceCode==2 || sourceCode==3 {
//聚合主扫(微信JSAPI、微信小程序)
merchant_no = merchant_no3
term_no = term_no3
} else if sourceCode==9 {
//聚合被扫(扫码枪)
merchant_no = merchant_no4
term_no = term_no4
}
//todo 参数赋值
data := make(map[string]interface{}) data := make(map[string]interface{})
data["merchant_no"] = merchant_no //商户号 data["req_time"] = date_time1
data["term_no"] = term_no//终端号 data["version"] = version
data["out_trade_no"] = paymentOrderCode //商户交易流水号 data["out_org_code"] = out_org_code
data2 := make(map[string]interface{})
data2["merchant_no"] = merchant_no //商户号
data2["term_no"] = term_no//终端号
data2["out_trade_no"] = paymentOrderCode //商户交易流水号
//data["trade_no"] = trade_no //拉卡拉交易流水号 //data["trade_no"] = trade_no //拉卡拉交易流水号
data["req_data"] = data2
data_json, err := json.Marshal(data) data_json, err := json.Marshal(data)
if err != nil { if err != nil {
return 0, err return 0, err
} }
fmt.Println("拉卡拉请求参数(支付查询)", data_json)
//调拉卡拉接口 //调拉卡拉接口
err, _, lakala_rtn := lakala_post(&input2, url, "", data_json) err, _, lakala_rtn := lakala_post(&input2, url, "", data_json)
if err != nil { if err != nil {
...@@ -1012,23 +1083,37 @@ func SqbQueryOrderState(tx *sql.Tx, paymentOrderCode, attach string, billID int6 ...@@ -1012,23 +1083,37 @@ func SqbQueryOrderState(tx *sql.Tx, paymentOrderCode, attach string, billID int6
//INIT-初始化 CREATE-下单成功 SUCCESS-交易成功 FAIL-交易失败 DEAL-交易处理中 //INIT-初始化 CREATE-下单成功 SUCCESS-交易成功 FAIL-交易失败 DEAL-交易处理中
//UNKNOWN-未知状态 CLOSE-订单关闭 PART_REFUND-部分退款 REFUND-全部退款(或订单被撤销) //UNKNOWN-未知状态 CLOSE-订单关闭 PART_REFUND-部分退款 REFUND-全部退款(或订单被撤销)
trade_state := lakala_rtn.(map[string]interface{})["trade_state"] //交易状态 code := lakala_rtn.(map[string]interface{})["code"] //交易code
fmt.Println("code返回值:", code)
if code != "BBS00000" {
// 返回失败
return 0, nil //todo 返回 2: 结算失败 ?
}
resp_data := lakala_rtn.(map[string]interface{})["resp_data"]
fmt.Println("resp_data返回值:", resp_data)
if resp_data == nil {
// 返回失败
return 0, nil //todo 返回 2: 结算失败 ?
}
trade_state := resp_data.(map[string]interface{})["trade_state"] //交易状态
fmt.Println("trade_state返回值:", trade_state)
if trade_state != "SUCCESS" { if trade_state != "SUCCESS" {
// 返回未结算 // 返回未结算
return 0, nil //todo 返回 2: 结算失败 ? return 0, nil //todo 返回 2: 结算失败 ?
} }
querySQL := `select result_code from pay_bill where id = ?` querySQL := `select result_code from system_pay_bill where id = ?`
var resultCode uint var resultCode uint
err = tx.QueryRow(querySQL, billID).Scan(&resultCode) err = tx.QueryRow(querySQL, billID).Scan(&resultCode)
if err != nil { if err != nil {
return 0, errors.New("查询失败:" + err.Error()) return 0, errors.New("查询失败:" + err.Error())
} }
fmt.Println("resultCode返回值:", resultCode)
// 如果支付过、则直接返回 // 如果支付过、则直接返回
if resultCode != 0 && resultCode != 2 { if resultCode != 0 && resultCode != 2 {
// 返回支付成功 // 返回支付成功
fmt.Println("支付过、则直接返回支付成功")
return 1, nil return 1, nil
} }
...@@ -1036,7 +1121,8 @@ func SqbQueryOrderState(tx *sql.Tx, paymentOrderCode, attach string, billID int6 ...@@ -1036,7 +1121,8 @@ func SqbQueryOrderState(tx *sql.Tx, paymentOrderCode, attach string, billID int6
err = BillPayStateSuccess(tx, billID) err = BillPayStateSuccess(tx, billID)
if err != nil { if err != nil {
//beego.Error("改变支付状态为成功时错误: ", err) //beego.Error("改变支付状态为成功时错误: ", err)
tx.Rollback() //tx.Rollback()
fmt.Println("改变支付状态为成功时错误:", billID)
return 0, nil return 0, nil
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment