main.go 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. package main
  2. import (
  3. "context"
  4. "encoding/json"
  5. "fmt"
  6. _ "hello/routers"
  7. "log"
  8. "os"
  9. "strings"
  10. "time"
  11. _ "hello/grpc/gapi"
  12. pb "hello/grpc/gapi"
  13. "crypto/md5"
  14. "github.com/astaxie/beego"
  15. "github.com/astaxie/beego/logs"
  16. "github.com/astaxie/beego/orm"
  17. jwt "github.com/dgrijalva/jwt-go"
  18. _ "github.com/go-sql-driver/mysql"
  19. "google.golang.org/grpc"
  20. )
  21. func init() {
  22. linkMysqlDataBase()
  23. }
  24. func linkMysqlDataBase() {
  25. dbuser := beego.AppConfig.String("dbuser")
  26. dbpassword := beego.AppConfig.String("dbpassword")
  27. dbhost := beego.AppConfig.String("dbhost")
  28. dbport := beego.AppConfig.String("dbport")
  29. dbname := beego.AppConfig.String("dbname")
  30. //注册mysql Driver
  31. orm.RegisterDriver("mysql", orm.DRMySQL)
  32. //构造conn连接
  33. conn := dbuser + ":" + dbpassword + "@tcp(" + dbhost + ":" + dbport + ")/" + dbname + "?charset=utf8"
  34. //注册数据库连接
  35. orm.RegisterDataBase("default", "mysql", conn)
  36. // 注册第二个数据库
  37. dblogname := beego.AppConfig.String("dblogname")
  38. //构造conn连接
  39. conn2 := dbuser + ":" + dbpassword + "@tcp(" + dbhost + ":" + dbport + ")/" + dblogname + "?charset=utf8"
  40. //注册数据库连接
  41. orm.RegisterDataBase("ywt_log_db", "mysql", conn2)
  42. fmt.Printf("数据库ywt_center连接成功!%s\n", conn)
  43. fmt.Printf("数据库ywt_log连接成功!%s\n", conn2)
  44. }
  45. func main() {
  46. // linkGrpcServerTest()
  47. // mapTest()
  48. jwtTest()
  49. beego.Run()
  50. }
  51. // Claims custom token
  52. type Claims struct {
  53. Appid string `json:"appid"` // appid
  54. Checksum string `json:"checksum"` // Checksum
  55. jwt.StandardClaims
  56. }
  57. func jwtTest() {
  58. // 创建 jwt
  59. 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\"}]}"
  60. appid := "gk_druggist"
  61. appsecret := "gk_druggist_123456"
  62. token := createJwt(body, appid, appsecret)
  63. logs.Info("token:", token)
  64. result := validateToke(token, body, appid, appsecret)
  65. logs.Info("result:", result)
  66. token2 := "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcHBpZCI6ImdrX2RydWdnaXN0IiwiY2hlY2tzdW0iOiI5OTU4MkQzMThEMURFMTRDMEQxOUU3OTFCRUI2NDU4OCIsImlhdCI6MTU3MDgwNjMyNn0.GAB_PDez1Z4uF4bb8sIoo_Br7TSgF5WH8u1d98927VY"
  67. result2 := validateToke(token2, body, appid, appsecret)
  68. logs.Info("result2:", result2)
  69. }
  70. // 签发token
  71. func createJwt(body string, appid string, appsecret string) (returnToken string) {
  72. pl := make(jwt.MapClaims)
  73. pl["appid"] = appid
  74. md5str2 := checkSum(body)
  75. pl["checksum"] = md5str2
  76. token := jwt.New(jwt.SigningMethodHS256)
  77. token.Claims = pl
  78. tokenStr, err := token.SignedString([]byte(appsecret))
  79. if err != nil {
  80. return ""
  81. }
  82. return tokenStr
  83. }
  84. // 校验token
  85. func validateToke(signedToken string, body string, appid string, appsecret string) (result bool) {
  86. token, err := jwt.ParseWithClaims(signedToken, &Claims{},
  87. func(token *jwt.Token) (interface{}, error) {
  88. if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
  89. return nil, fmt.Errorf("unexpected login method %v", token.Header["alg"])
  90. }
  91. return []byte(appsecret), nil
  92. })
  93. if err != nil {
  94. return false
  95. }
  96. claims, ok := token.Claims.(*Claims)
  97. logs.Info("Appid:", claims.Appid, "\tChecksum:", claims.Checksum, "\tValid:", token.Valid)
  98. if ok && token.Valid {
  99. return true
  100. }
  101. return false
  102. }
  103. // 将body进行md5计算,并转为大写,然后返回
  104. func checkSum(body string) (sum string) {
  105. data := []byte(body)
  106. has := md5.Sum(data)
  107. md5str1 := fmt.Sprintf("%x", has) //将[]byte转成16进制
  108. md5str2 := strings.ToUpper(md5str1)
  109. logs.Info("----- checksum -----:", md5str2)
  110. return md5str2
  111. }
  112. func mapTest() {
  113. countryCapitalMap := make(map[string]string)
  114. /* map插入key - value对,各个国家对应的首都 */
  115. countryCapitalMap["France"] = "巴黎"
  116. countryCapitalMap["Italy"] = "罗马"
  117. countryCapitalMap["Japan"] = "东京"
  118. countryCapitalMap["India "] = "新德里"
  119. for k, v := range countryCapitalMap {
  120. fmt.Printf("%s -> %s\n", k, v)
  121. }
  122. value, err := json.Marshal(countryCapitalMap)
  123. if err != nil {
  124. fmt.Printf("err", err)
  125. }
  126. fmt.Println(string(value))
  127. logs.Info(string(value))
  128. }
  129. func sliceTest() {
  130. /* 创建切片 */
  131. numbers := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 10}
  132. printSlice(numbers)
  133. // 遍历
  134. for index, num := range numbers {
  135. fmt.Println(index, "\t", num)
  136. }
  137. //range也可以用在map的键值对上。
  138. kvs := map[string]string{"a": "apple", "b": "banana"}
  139. for k, v := range kvs {
  140. fmt.Printf("%s -> %s\n", k, v)
  141. }
  142. }
  143. func printSlice(x []int) {
  144. fmt.Printf("len=%d cap=%d slice=%v\n", len(x), cap(x), x)
  145. }
  146. // ------------- grpc client start -----------------------------
  147. // 连接grpc测试
  148. func linkGrpcServerTest() {
  149. fmt.Println("-------I'm coming linkGrpcServerTest------")
  150. address := beego.AppConfig.String("service.agent.grpc.addr")
  151. // Set up a connection to the server.
  152. conn, err := grpc.Dial(address, grpc.WithInsecure())
  153. if err != nil {
  154. fmt.Println("did not connect: %v", err)
  155. }
  156. defer conn.Close()
  157. c := pb.NewUserServiceClient(conn)
  158. // Contact the server and print out its response.
  159. userId := int32(4)
  160. mobile := ""
  161. if len(os.Args) > 1 {
  162. mobile = os.Args[1]
  163. }
  164. ctx, cancel := context.WithTimeout(context.Background(), time.Second)
  165. defer cancel()
  166. r, err := c.FindByUserId(ctx, &pb.UserRequest{Userid: userId,
  167. Phone: mobile,
  168. })
  169. if err != nil {
  170. fmt.Println("could not greet: %v", err)
  171. }
  172. log.Println("Greeting: %s", r.GetUser())
  173. userName := r.GetUser().Realname
  174. log.Println(userName)
  175. }
  176. // ------------- end grpc client -----------------------------