main.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. package main
  2. import (
  3. "bytes"
  4. "context"
  5. "encoding/json"
  6. "fmt"
  7. _ "hello/routers"
  8. "log"
  9. "os"
  10. "strings"
  11. "time"
  12. _ "hello/grpc/gapi"
  13. pb "hello/grpc/gapi"
  14. "crypto/md5"
  15. "github.com/astaxie/beego"
  16. "github.com/astaxie/beego/logs"
  17. "github.com/astaxie/beego/orm"
  18. jwt "github.com/dgrijalva/jwt-go"
  19. _ "github.com/go-sql-driver/mysql"
  20. "google.golang.org/grpc"
  21. )
  22. func init() {
  23. linkMysqlDataBase()
  24. }
  25. func linkMysqlDataBase() {
  26. dbuser := beego.AppConfig.String("dbuser")
  27. dbpassword := beego.AppConfig.String("dbpassword")
  28. dbhost := beego.AppConfig.String("dbhost")
  29. dbport := beego.AppConfig.String("dbport")
  30. dbname := beego.AppConfig.String("dbname")
  31. //注册mysql Driver
  32. orm.RegisterDriver("mysql", orm.DRMySQL)
  33. //构造conn连接
  34. conn := dbuser + ":" + dbpassword + "@tcp(" + dbhost + ":" + dbport + ")/" + dbname + "?charset=utf8"
  35. //注册数据库连接
  36. orm.RegisterDataBase("default", "mysql", conn)
  37. // 注册第二个数据库
  38. dblogname := beego.AppConfig.String("dblogname")
  39. //构造conn连接
  40. conn2 := dbuser + ":" + dbpassword + "@tcp(" + dbhost + ":" + dbport + ")/" + dblogname + "?charset=utf8"
  41. //注册数据库连接
  42. orm.RegisterDataBase("ywt_log_db", "mysql", conn2)
  43. fmt.Printf("数据库ywt_center连接成功!%s\n", conn)
  44. fmt.Printf("数据库ywt_log连接成功!%s\n", conn2)
  45. }
  46. func main() {
  47. // linkGrpcServerTest()
  48. // mapTest()
  49. // rabbitMQTest()
  50. // jwtTest()
  51. beego.Run()
  52. }
  53. // Claims custom token
  54. type Claims struct {
  55. Appid string `json:"appid"` // appid
  56. Checksum string `json:"checksum"` // Checksum
  57. jwt.StandardClaims
  58. }
  59. func jwtTest() {
  60. // 创建 jwt
  61. body := "{\"invoice\":[{\"amount\":762.94,\"custName\":\"黎敏建\",\"invoiceCode\":\"044001600211\",\"invoiceInfo\":\"【国药控股大药房】尊敬的客户:您申请的电子发票已开具成功,请点击下载:http://cs.ruizhi.com:8090/invoiceplatform/ruizhi/fiscal/esign/downloadPdf.do?id=392e101b1170484f93ee6b5279f189b1\",\"invoiceNo\":\"93113800\",\"invoiceUrl\":\"http://cs.ruizhi.com:8090/invoiceplatform/ruizhi/fiscal/esign/downloadPdf.do?id=392e101b1170484f93ee6b5279f189b1\",\"matchId\":\"YWT-INVOICE1570672860040\",\"orderNo\":\"201910100914371503607\"},{\"amount\":410.27,\"custName\":\"杨勇彬\",\"invoiceCode\":\"044001600211\",\"invoiceInfo\":\"【国药控股大药房】尊敬的客户:您申请的电子发票已开具成功,请点击下载:http://cs.ruizhi.com:8090/invoiceplatform/ruizhi/fiscal/esign/downloadPdf.do?id=b55ee05232c748d1a94c616046f60825\",\"invoiceNo\":\"93113805\",\"invoiceUrl\":\"http://cs.ruizhi.com:8090/invoiceplatform/ruizhi/fiscal/esign/downloadPdf.do?id=b55ee05232c748d1a94c616046f60825\",\"matchId\":\"YWT-INVOICE1570677060040\",\"orderNo\":\"201910101042375134013\"},{\"amount\":492.12,\"custName\":\"丘婷\",\"invoiceCode\":\"044001600211\",\"invoiceInfo\":\"【国药控股大药房】尊敬的客户:您申请的电子发票已开具成功,请点击下载:http://cs.ruizhi.com:8090/invoiceplatform/ruizhi/fiscal/esign/downloadPdf.do?id=dbaa1c25e785443dbb76cb59efec2ca5\",\"invoiceNo\":\"93113799\",\"invoiceUrl\":\"http://cs.ruizhi.com:8090/invoiceplatform/ruizhi/fiscal/esign/downloadPdf.do?id=dbaa1c25e785443dbb76cb59efec2ca5\",\"matchId\":\"YWT-INVOICE1570672860040\",\"orderNo\":\"201910100937249333721\"},{\"amount\":227.82,\"custName\":\"卢桂珍\",\"invoiceCode\":\"044001600211\",\"invoiceInfo\":\"【国药控股大药房】尊敬的客户:您申请的电子发票已开具成功,请点击下载:http://cs.ruizhi.com:8090/invoiceplatform/ruizhi/fiscal/esign/downloadPdf.do?id=2f15feafd34249b78252c5f1eb847930\",\"invoiceNo\":\"93113797\",\"invoiceUrl\":\"http://cs.ruizhi.com:8090/invoiceplatform/ruizhi/fiscal/esign/downloadPdf.do?id=2f15feafd34249b78252c5f1eb847930\",\"matchId\":\"YWT-INVOICE1570672860040\",\"orderNo\":\"201910100845504303496\"},{\"amount\":53.5,\"custName\":\"张惠\",\"invoiceCode\":\"044001600211\",\"invoiceInfo\":\"【国药控股大药房】尊敬的客户:您申请的电子发票已开具成功,请点击下载:http://cs.ruizhi.com:8090/invoiceplatform/ruizhi/fiscal/esign/downloadPdf.do?id=1e906096430c477c87b80cdb53c7fbb8\",\"invoiceNo\":\"93113804\",\"invoiceUrl\":\"http://cs.ruizhi.com:8090/invoiceplatform/ruizhi/fiscal/esign/downloadPdf.do?id=1e906096430c477c87b80cdb53c7fbb8\",\"matchId\":\"YWT-INVOICE1570677060040\",\"orderNo\":\"201910101042226514011\"},{\"amount\":553.86,\"custName\":\"罗艳文\",\"invoiceCode\":\"044001600211\",\"invoiceInfo\":\"【国药控股大药房】尊敬的客户:您申请的电子发票已开具成功,请点击下载:http://cs.ruizhi.com:8090/invoiceplatform/ruizhi/fiscal/esign/downloadPdf.do?id=6522f231782e45a499a32717bd87dac4\",\"invoiceNo\":\"93113802\",\"invoiceUrl\":\"http://cs.ruizhi.com:8090/invoiceplatform/ruizhi/fiscal/esign/downloadPdf.do?id=6522f231782e45a499a32717bd87dac4\",\"matchId\":\"YWT-INVOICE1570677060040\",\"orderNo\":\"201910101048054304031\"},{\"amount\":2060.86,\"custName\":\"陈滋\",\"invoiceCode\":\"044001600211\",\"invoiceInfo\":\"【国药控股大药房】尊敬的客户:您申请的电子发票已开具成功,请点击下载:http://cs.ruizhi.com:8090/invoiceplatform/ruizhi/fiscal/esign/downloadPdf.do?id=167d23c3431843b5aa3227700d8039a1\",\"invoiceNo\":\"93113803\",\"invoiceUrl\":\"http://cs.ruizhi.com:8090/invoiceplatform/ruizhi/fiscal/esign/downloadPdf.do?id=167d23c3431843b5aa3227700d8039a1\",\"matchId\":\"YWT-INVOICE1570677060040\",\"orderNo\":\"201910101002385863841\"},{\"amount\":103.02,\"custName\":\"唐玲\",\"invoiceCode\":\"044001600211\",\"invoiceInfo\":\"【国药控股大药房】尊敬的客户:您申请的电子发票已开具成功,请点击下载:http://cs.ruizhi.com:8090/invoiceplatform/ruizhi/fiscal/esign/downloadPdf.do?id=e091ddec33824b0bbf6ccefd737686bc\",\"invoiceNo\":\"93113798\",\"invoiceUrl\":\"http://cs.ruizhi.com:8090/invoiceplatform/ruizhi/fiscal/esign/downloadPdf.do?id=e091ddec33824b0bbf6ccefd737686bc\",\"matchId\":\"YWT-INVOICE1570672860040\",\"orderNo\":\"201910091327038342613\"}]}"
  62. appid := "gk_druggist"
  63. appsecret := "gk_druggist_123456"
  64. token := createJwt(body, appid, appsecret)
  65. logs.Info("token:", token)
  66. result := validateToke(token, body, appid, appsecret)
  67. logs.Info("result:", result)
  68. token2 := "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcHBpZCI6ImdrX2RydWdnaXN0IiwiY2hlY2tzdW0iOiI5OTU4MkQzMThEMURFMTRDMEQxOUU3OTFCRUI2NDU4OCIsImlhdCI6MTU3MDgwNjMyNn0.GAB_PDez1Z4uF4bb8sIoo_Br7TSgF5WH8u1d98927VY"
  69. result2 := validateToke(token2, body, appid, appsecret)
  70. logs.Info("result2:", result2)
  71. }
  72. // 签发token
  73. func createJwt(body string, appid string, appsecret string) (returnToken string) {
  74. pl := make(jwt.MapClaims)
  75. pl["appid"] = appid
  76. md5str2 := checkSum(body)
  77. pl["checksum"] = md5str2
  78. token := jwt.New(jwt.SigningMethodHS256)
  79. token.Claims = pl
  80. tokenStr, err := token.SignedString([]byte(appsecret))
  81. if err != nil {
  82. return ""
  83. }
  84. return tokenStr
  85. }
  86. // 校验token
  87. func validateToke(signedToken string, body string, appid string, appsecret string) (result bool) {
  88. token, err := jwt.ParseWithClaims(signedToken, &Claims{},
  89. func(token *jwt.Token) (interface{}, error) {
  90. if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
  91. return nil, fmt.Errorf("unexpected login method %v", token.Header["alg"])
  92. }
  93. return []byte(appsecret), nil
  94. })
  95. if err != nil {
  96. return false
  97. }
  98. claims, ok := token.Claims.(*Claims)
  99. logs.Info("Appid:", claims.Appid, "\tChecksum:", claims.Checksum, "\tValid:", token.Valid)
  100. if ok && token.Valid {
  101. return true
  102. }
  103. return false
  104. }
  105. // 将body进行md5计算,并转为大写,然后返回
  106. func checkSum(body string) (sum string) {
  107. data := []byte(body)
  108. has := md5.Sum(data)
  109. md5str1 := fmt.Sprintf("%x", has) //将[]byte转成16进制
  110. md5str2 := strings.ToUpper(md5str1)
  111. logs.Info("----- checksum -----:", md5str2)
  112. return md5str2
  113. }
  114. func mapTest() {
  115. countryCapitalMap := make(map[string]string)
  116. /* map插入key - value对,各个国家对应的首都 */
  117. countryCapitalMap["France"] = "巴黎"
  118. countryCapitalMap["Italy"] = "罗马"
  119. countryCapitalMap["Japan"] = "东京"
  120. countryCapitalMap["India "] = "新德里"
  121. for k, v := range countryCapitalMap {
  122. fmt.Printf("%s -> %s\n", k, v)
  123. }
  124. value, err := json.Marshal(countryCapitalMap)
  125. if err != nil {
  126. fmt.Printf("err", err)
  127. }
  128. fmt.Println(string(value))
  129. logs.Info(string(value))
  130. }
  131. func sliceTest() {
  132. /* 创建切片 */
  133. numbers := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 10}
  134. printSlice(numbers)
  135. // 遍历
  136. for index, num := range numbers {
  137. fmt.Println(index, "\t", num)
  138. }
  139. //range也可以用在map的键值对上。
  140. kvs := map[string]string{"a": "apple", "b": "banana"}
  141. for k, v := range kvs {
  142. fmt.Printf("%s -> %s\n", k, v)
  143. }
  144. }
  145. func printSlice(x []int) {
  146. fmt.Printf("len=%d cap=%d slice=%v\n", len(x), cap(x), x)
  147. }
  148. // ------------- grpc client start -----------------------------
  149. // 连接grpc测试
  150. func linkGrpcServerTest() {
  151. fmt.Println("-------I'm coming linkGrpcServerTest------")
  152. address := beego.AppConfig.String("service.agent.grpc.addr")
  153. // Set up a connection to the server.
  154. conn, err := grpc.Dial(address, grpc.WithInsecure())
  155. if err != nil {
  156. fmt.Println("did not connect: %v", err)
  157. }
  158. defer conn.Close()
  159. c := pb.NewUserServiceClient(conn)
  160. // Contact the server and print out its response.
  161. userId := int32(4)
  162. mobile := ""
  163. if len(os.Args) > 1 {
  164. mobile = os.Args[1]
  165. }
  166. ctx, cancel := context.WithTimeout(context.Background(), time.Second)
  167. defer cancel()
  168. r, err := c.FindByUserId(ctx, &pb.UserRequest{Userid: userId,
  169. Phone: mobile,
  170. })
  171. if err != nil {
  172. fmt.Println("could not greet: %v", err)
  173. }
  174. log.Println("Greeting: %s", r.GetUser())
  175. userName := r.GetUser().Realname
  176. log.Println(userName)
  177. }
  178. // ------------- end grpc client -----------------------------
  179. type ReqData struct {
  180. Amount int32
  181. BizId int32
  182. OrderId int32
  183. OrderNo string
  184. RefundNo string
  185. RefundStatus int32
  186. Custom string
  187. RefundSuccessTime int64
  188. }
  189. // ------------- grpc client start -----------------------------
  190. // 连接rabbitMQ grpc测试
  191. func rabbitMQTest() {
  192. fmt.Println("-------I'm coming rabbitMQTest------")
  193. address := beego.AppConfig.String("service.agent.grpc.addr")
  194. // Set up a connection to the server.
  195. conn, err := grpc.Dial(address, grpc.WithInsecure())
  196. if err != nil {
  197. fmt.Println("did not connect: %v", err)
  198. }
  199. defer conn.Close()
  200. c := pb.NewMQExecutorServiceClient(conn)
  201. // Contact the server and print out its response.
  202. ctx, cancel := context.WithTimeout(context.Background(), time.Second)
  203. defer cancel()
  204. testStruct := ReqData{Amount: 10,
  205. BizId: 1343,
  206. OrderId: 1737100,
  207. OrderNo: "201910211753006096328",
  208. RefundNo: "R201910221752139946344",
  209. RefundStatus: 1,
  210. Custom: "",
  211. RefundSuccessTime: 1571299528000}
  212. reqBodyBytes := new(bytes.Buffer)
  213. json.NewEncoder(reqBodyBytes).Encode(testStruct)
  214. fmt.Println(reqBodyBytes.Bytes())
  215. r, err := c.ExecuteGRPC(ctx, &pb.ExecuteGRPCRequest{
  216. Method: "/com.ywt.gapi.drug.DrugService/refundNotify",
  217. Data: reqBodyBytes.Bytes(),
  218. Priority: 1,
  219. MsgId: "",
  220. })
  221. if err != nil {
  222. fmt.Println("could not greet: %v", err)
  223. }
  224. log.Println("GetCode: %s", r.GetCode())
  225. log.Println("GetMsgId: %s", r.GetMsgId())
  226. }
  227. // ------------- end grpc client -----------------------------