浏览代码

诺诺网发票接口

baichengfei 5 年之前
父节点
当前提交
cb93e69e9a

+ 91 - 0
src/dashoo.cn/backend/api/business/invoiceinfo/invoiceinfoService.go

@@ -1,16 +1,107 @@
 package invoiceinfo
 
 import (
+	"bytes"
+	"crypto/cipher"
+	"crypto/des"
+	"crypto/md5"
 	. "dashoo.cn/backend/api/mydb"
+	"encoding/base64"
+	"encoding/json"
 	"github.com/go-xorm/xorm"
+	"io/ioutil"
+	"net/url"
+	//"time"
+
+	//"github.com/rs/zerolog"
+	//"log"
+	"net/http"
+	//"strings"
 )
 
 type InvoiceService struct {
 	MyServiceBase
 }
 
+type InvoiceJson struct {
+	Status   string `json:"status"`
+	Message  string `json:"message"`
+	Fpqqlsh  string `json:"fpqqlsh"`
+}
+
+type InvoiceNumberJson struct {
+	Result   string `json:"result"`
+	ErrorMsg string `json:"errorMsg"`
+	List 	 string `json:"list"`
+}
+
 func GetInvoiceService(xormEngine *xorm.Engine) *InvoiceService {
 	s := new(InvoiceService)
 	s.DBE = xormEngine
 	return s
 }
+
+func encrypt(content string) string {
+	// http://blog.51cto.com/lisea/2065657
+	//key64 := config.Conf.YinChuanAirPort.Key64
+	key64 := "2329CC5F90EDAA8208F1F3C72A0CE72A713A9D425CD50CDE"
+	key, err := base64.StdEncoding.DecodeString(key64)
+	if err != nil {
+		//slog.Error().Err(err).Msg("decode error")
+		return ""
+	}
+	sum := md5.Sum([]byte(content))
+	sourceBuf := bytes.Join([][]byte{sum[:], []byte(content)}, []byte(""))
+	p, err := DesCBCEncrypt(sourceBuf, key)
+	if err != nil {
+		//slog.Error().Err(err).Msg("decode error")
+		return ""
+	}
+	return base64.StdEncoding.EncodeToString(p)
+}
+
+func DesCBCEncrypt(origData, key []byte) ([]byte, error) {
+	desKey := key[:8]
+	//iv := key[8:]
+	block, err := des.NewCipher(desKey)
+	if err != nil {
+		return nil, err
+	}
+	origData = PKCS5Padding(origData, block.BlockSize())
+	//blockMode := cipher.NewCBCEncrypter(block, iv)
+	blockMode := cipher.NewCBCEncrypter(block, desKey)
+	crypted := make([]byte, len(origData))
+	// 根据CryptBlocks方法的说明,如下方式初始化crypted也可以
+	//crypted := origData
+	blockMode.CryptBlocks(crypted, origData)
+	return crypted, nil
+}
+
+//ECB PKCS5Padding
+func PKCS5Padding(ciphertext []byte, blockSize int) []byte {
+	padding := blockSize - len(ciphertext)%blockSize
+	padtext := bytes.Repeat([]byte{byte(padding)}, padding)
+	return append(ciphertext, padtext...)
+}
+
+func (s *InvoiceService) Post(urls string, params string) InvoiceJson {
+	params1 := encrypt(params)
+	urlValues := url.Values{}
+	urlValues.Add("order", params1)
+	resp, _ := http.PostForm(urls, urlValues)
+	body, _ := ioutil.ReadAll(resp.Body)
+	var invoiceJson InvoiceJson
+	json.Unmarshal(body, &invoiceJson)
+	return invoiceJson
+}
+
+func (s *InvoiceService) SerialNumberPost(urls string, params string) InvoiceNumberJson {
+	params1 := encrypt(params)
+	urlValues := url.Values{}
+	urlValues.Add("order", params1)
+	resp, _ := http.PostForm(urls, urlValues)
+	body, _ := ioutil.ReadAll(resp.Body)
+	var invoiceJson InvoiceNumberJson
+	json.Unmarshal(body, &invoiceJson)
+	return invoiceJson
+}

+ 90 - 59
src/dashoo.cn/backend/api/controllers/oilsupplier/invoiceinfo.go

@@ -3,11 +3,8 @@ package oilsupplier
 import (
 	"dashoo.cn/backend/api/business/invoiceinfo"
 	"dashoo.cn/backend/api/business/paymentinfo"
-	"dashoo.cn/backend/api/business/workflow"
 	. "dashoo.cn/backend/api/controllers"
 	"dashoo.cn/utils"
-	"fmt"
-	"time"
 )
 
 type OilInvoiceController struct {
@@ -47,67 +44,101 @@ func (this *OilInvoiceController) GetInvoiceData() {
 // @Description 更新发票状态
 // @Success	200	{object} controllers.Request
 // @router /updateisinvoice [get]
-func (this *OilInvoiceController) UpdateIsInvoice() {
-
-	id := this.GetString("Id")
-	srcIds := this.GetString("SrcIds")
-	session := utils.DBE.NewSession()
-	defer session.Close()
-	err := session.Begin()
-
-	cols := []string{"IsInvoice", "InvoiceOn"}
-	svc := invoiceinfo.GetOilInvoiceInfoSession(session)
-	var info invoiceinfo.OilInvoiceInfo
-	info.IsInvoice = "1"
-	info.InvoiceOn = time.Now()
-	_, err = svc.UpdateEntityByIdCols(id, &info, cols)
-
+func (this *OilInvoiceController) UpdateIsInvoice() string {
+
+	//id := this.GetString("Id")
+	//srcIds := this.GetString("SrcIds")
+	//session := utils.DBE.NewSession()
+	//defer session.Close()
+	//err := session.Begin()
+
+	// 诺诺网发票接口
+	invoice := invoiceinfo.GetInvoiceService(utils.DBE)
+	url := "https://nnfpbox.nuonuocs.cn/shop/buyer/allow/cxfKp/cxfServerKpOrderSync.action"
+	identity := "2329CC5F90EDAA8208F1F3C72A0CE72A713A9D425CD50CDE"
+	params := "{\"identity\":\"2329CC5F90EDAA8208F1F3C72A0CE72A713A9D425CD50CDE\",\"order\":{\"buyername\":\"浙江爱信诺\",\"taxnum\":\"124511234993295177\",\"phone\":\"0\",\"address\":\"浙江省杭州市万塘路\",\"account\":\"\",\"telephone\":\"0\",\"orderno\":\"nuonuo12345\",\"invoicedate\":\"2018-10-31 19:16:51\",\"clerk\":\"黄芝\",\"saleaccount\":\"宇宙行442612010103507108\",\"salephone\":\"0774-7893911\",\"saleaddress\":\"富川瑶族自治县新永路138号\",\"saletaxnum\":\"339901999999142\",\"kptype\":\"1\",\"message\":\"\",\"payee\":\"林莉苏\",\"checker\":\"林莉苏\",\"tsfs\":\"-1\",\"email\":\"502192347@qq.com\",\"qdbz\":\"0\",\"qdxmmc\":\"\",\"dkbz\":\"0\",\"deptid\":\"\",\"clerkid\":\"\",\"invoiceLine\":\"p\",\"cpybz\":\"\",\"detail\":[{\"goodsname\":\"苹果\",\"num\":\"1\",\"price\":\"1\",\"hsbz\":\"1\",\"taxrate\":\"0.13\",\"spec\":\"\",\"unit\":\"吨\",\"spbm\":\"10101150101\",\"zsbm\":\"\",\"fphxz\":\"0\",\"yhzcbs\":\"0\",\"zzstsgl\":\"\",\"lslbs\":\"\",\"kce\":\"\"}]}}"
 	var errinfo ErrorInfo
-	if err != nil {
-		session.Rollback()
+	invoiceJson := invoice.Post(url, params)
+	if invoiceJson.Status != "0000"{
+		//session.Rollback()
 		errinfo.Code = -1
-		errinfo.Message = "操作失败!"
+		errinfo.Message = "操作失败!" + invoiceJson.Fpqqlsh
 		this.Data["json"] = &errinfo
 		this.ServeJSON()
-		return
+	} else if invoiceJson.Status == "0000" && invoiceJson.Fpqqlsh != "" {
+		// 根据流水号查询结果
+		url := "https://nnfpbox.nuonuocs.cn/shop/buyer/allow/ecOd/queryElectricKp.action"
+		params := "{'identity':'" + identity + "','fpqqlsh':['20170104160449979446']}"
+		invoiceJson1 := invoice.SerialNumberPost(url, params)
+		if invoiceJson1.Result != "success"{
+			//session.Rollback()
+			errinfo.Code = -1
+			errinfo.Message = "操作失败!" + invoiceJson1.ErrorMsg
+			this.Data["json"] = &errinfo
+			this.ServeJSON()
+		} else if invoiceJson1.Result == "success" && invoiceJson1.List != "" {
+			return ""
+		}
 	}
 
-	var payinfo paymentinfo.OilPaymentInfo
-	payinfo.IsInvoice = "1"
-	paycols := []string{"IsInvoice"}
-	where := "Id in (" + srcIds + ")"
-	err = svc.UpdateEntityBywheretbl(OilPaymentInfoName, &payinfo, paycols, where)
+	return invoiceJson.Status
+
+
+	//cols := []string{"IsInvoice", "InvoiceOn"}
+	//svc := invoiceinfo.GetOilInvoiceInfoSession(session)
+	//var info invoiceinfo.OilInvoiceInfo
+	//info.IsInvoice = "1"
+	//info.InvoiceOn = time.Now()
+	//_, err = svc.UpdateEntityByIdCols(id, &info, cols)
+	//
+
+	//if err != nil {
+	//	session.Rollback()
+	//	errinfo.Code = -1
+	//	errinfo.Message = "操作失败!"
+	//	this.Data["json"] = &errinfo
+	//	this.ServeJSON()
+	//	return
+	//}
+	//
+	//var payinfo paymentinfo.OilPaymentInfo
+	//payinfo.IsInvoice = "1"
+	//paycols := []string{"IsInvoice"}
+	//where := "Id in (" + srcIds + ")"
+	//err = svc.UpdateEntityBywheretbl(OilPaymentInfoName, &payinfo, paycols, where)
+	//
+	//if err != nil {
+	//	session.Rollback()
+	//	errinfo.Code = -1
+	//	errinfo.Message = "操作失败!"
+	//	this.Data["json"] = &errinfo
+	//	this.ServeJSON()
+	//	return
+	//}
+	//
+	//svcActiviti := workflow.GetActivitiService(utils.DBE)
+	//var ActiComplete workflow.ActiCompleteVM
+	//ActiComplete.ProcessKey = workflow.OIL_SUPPLIER_VERIFY
+	//ActiComplete.BusinessKey = id
+	//ActiComplete.UserId = this.User.Id
+	//ActiComplete.Remarks = ""
+	//ActiComplete.Result = "1"
+	//
+	//receiveVal := svcActiviti.TaskComplete(ActiComplete)
+	//fmt.Println(receiveVal)
+	//if receiveVal == "true" {
+	//	session.Commit()
+	//	errinfo.Code = 0
+	//	errinfo.Message = "操作成功!"
+	//	this.Data["json"] = &errinfo
+	//	this.ServeJSON()
+	//} else {
+	//	session.Rollback()
+	//	errinfo.Code = -1
+	//	errinfo.Message = "操作失败!"
+	//	this.Data["json"] = &errinfo
+	//	this.ServeJSON()
+	//}
+}
 
-	if err != nil {
-		session.Rollback()
-		errinfo.Code = -1
-		errinfo.Message = "操作失败!"
-		this.Data["json"] = &errinfo
-		this.ServeJSON()
-		return
-	}
 
-	svcActiviti := workflow.GetActivitiService(utils.DBE)
-	var ActiComplete workflow.ActiCompleteVM
-	ActiComplete.ProcessKey = workflow.OIL_SUPPLIER_VERIFY
-	ActiComplete.BusinessKey = id
-	ActiComplete.UserId = this.User.Id
-	ActiComplete.Remarks = ""
-	ActiComplete.Result = "1"
-
-	receiveVal := svcActiviti.TaskComplete(ActiComplete)
-	fmt.Println(receiveVal)
-	if receiveVal == "true" {
-		session.Commit()
-		errinfo.Code = 0
-		errinfo.Message = "操作成功!"
-		this.Data["json"] = &errinfo
-		this.ServeJSON()
-	} else {
-		session.Rollback()
-		errinfo.Code = -1
-		errinfo.Message = "操作失败!"
-		this.Data["json"] = &errinfo
-		this.ServeJSON()
-	}
-}