闲着没事 写个关于微信接口调用的吧
1.先去公众号设置ip白名单
配置白名单建议配置3个ip(外网Ip需要配置 内网不需要)
公司ip
ipconfig后的本地ip
线上ip
本地调试
2.拿到appid和appsecret 而且要注意的是 appsecret他会且只会告诉你一次 一定要存起来 否则就得重置了
3.通过appid和appsecret取得access_token 这是微信返回给你的 每次都会变
遇到问题
a)hibernate生成表明全是小写
解决办法
设置一下hibernate表名生成策略 让他按照你注解里边写的名生成
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
b)http请求一直报400
对象传递改为参数传递(现在只是缓解 有待彻底解决)
c)跨机器 可以垮ip访问就是可以夸服务器访问 所以定时调度部署在哪台机器上都行
一个关于两个主键的错 两种解决方案
1.反正开始那个表已经生成了 去掉一个主键
2.加上@IdClass 个人不建议这个 后续还会出现其他bug
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'startRule': Unsatisfied dependency expressed through field 'ruleRepository'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ruleRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: This class [class com.alert.alertSmas.entity.AlertRule] does not define an IdClass
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588) ~[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) ~[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366) ~[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1264) ~[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553) ~[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) ~[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761) ~[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867) ~[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543) ~[spring-context-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) ~[spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693) [spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360) [spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:303) [spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118) [spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107) [spring-boot-1.5.6.RELEASE.jar:1.5.6.RELEASE]
at com.alert.alertSmas.AlertSmasApplication.main(AlertSmasApplication.java:21) [classes/:na]
这个
工程的注入 不是通过注解 而是通过配置xml文件的 所谓依赖注入吧
api.xml
server.xml
微信接口返回
如果是失败 每个errcode也都有自己的含义 比如下边这个是没配置ip白名单{"errcode":40164,"errmsg":"invalid ip ***.***.***.96, not in whitelist hint: [CX6iSa07763187]"}
成功
{"errcode":0,"errmsg":"ok","msgid":91351397420810240}
微信返回给我们的Json要和实体一一对应 不然会报Json转换失败的错 可以在映射实体上加上
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown = true)//忽略不具备的属性
访问微信接口时 用的是外网ip 内网的不认 所以要配置外网ip白名单