微信公众号_微信公众号开发 - CSDN
微信公众号 订阅
微信公众号是开发者或商家在微信公众平台上申请的应用账号,该帐号与QQ账号互通,通过公众号,商家可在微信平台上实现和特定群体的文字、图片、语音、视频的全方位沟通、互动 。形成了一种主流的线上线下微信互动营销方式。2016年1月18日,腾讯在北京发布消息称,中国政务微信公号已逾10万。2018年4月,腾讯已查处9.9万多个违规公众号 [1]  。11月16日,微信公众平台发布公告称,个人注册公众号数量上限调整为1个 [2]  。2019年12月26日,微信公众号文章无法打开,点击文章链接后显示空白。随后,微信团队道歉,公众号后台大部分功能已经修复。 [3-4] 展开全文
微信公众号是开发者或商家在微信公众平台上申请的应用账号,该帐号与QQ账号互通,通过公众号,商家可在微信平台上实现和特定群体的文字、图片、语音、视频的全方位沟通、互动 。形成了一种主流的线上线下微信互动营销方式。2016年1月18日,腾讯在北京发布消息称,中国政务微信公号已逾10万。2018年4月,腾讯已查处9.9万多个违规公众号 [1]  。11月16日,微信公众平台发布公告称,个人注册公众号数量上限调整为1个 [2]  。2019年12月26日,微信公众号文章无法打开,点击文章链接后显示空白。随后,微信团队道歉,公众号后台大部分功能已经修复。 [3-4]
信息
外文名
Wechat Official Account
类    型
开放应用平台
分    类
订阅号和服务号
中文名
微信公众号
认证收费
服务号、订阅号认证均需300元/年
隶属企业
腾讯公司
微信公众号发展历程
2018年6月27日,微信官方宣布,微信公众平台上线开放转载功能,文章可以直接被转载,不需要人工再次确认。 [5]  2018年11月16日,微信公众平台发布公告称,即日起,公众号注册将做调整:个人主体注册公众号数量上限由2个调整为1个;企业类主体注册公众号数量上限由5个调整为2个。 [2]  2018年12月29日,微信公众平台运营功能再次升级,修改已发送文章的错别字上限由5个上调至10个,同时支持增、删和替换,但标题和摘要依然无法修改,修改机会依然有且仅有一次。 [6]  2019年8月,滴滴出行宣布,与万达酒店及度假村达成战略合作。用户可在万达酒店微信公众号内使用滴滴叫车。 [7]  2020年6月29日,微信公众号增加两项新功能,在文章底部新增了“分享”和“赞”。其中,用户点击“分享”可“分享到朋友圈”或“发送给朋友”。这两项新功能已陆续全量开放。 [8] 
收起全文
精华内容
参与话题
  • 课程以微信公众号开发视角,讲解JAVA开发微信公众号所需的框架、第三方工具。 购买套餐还赠送经典微信开发课程——[微信公众号_独立知识点]环境搭建。该课程针对各种复杂的网络环境,讲解如何构建开发环境,已解决...
  • 开发微信公众号(二)

    万次阅读 2018-05-23 00:35:56
    看完昨天的文章「开发微信公众号(一)」 估计不少人已经开始期待我继续更新了,这不赶紧马不停蹄,加班加点给你们更新了第二篇。现在的你已经有了一个属于自己的微信公众号,那么你想如果按照微信公众号的自动回复...


                            


    看完昨天的文章「开发微信公众号(一)」 估计不少人已经开始期待我继续更新了,这不赶紧马不停蹄,加班加点给你们更新了第二篇。


    现在的你已经有了一个属于自己的微信公众号,那么你想如果按照微信公众号的自动回复,来实现用户发送电影名就可以获得想要的电影链接,那是得设置多少的呀,这显然是不可能的,那么我们就要用到服务器来帮我们实现了的,腾讯,阿里云的都可以,当然如果你是学生那么就可以享有购买服务器时的福利了的,有10元/月支持学生购买服务器的,个人感觉还是蛮划算的。那么问题又来了,不是学生党购买似乎会觉得有点贵,这里我直接给大家一个福利,关注我的微信公众号,回复「令牌」,不知道令牌是什么?没关系,先接着往下看的!我直接把我的令牌给大家用,直到服务器崩掉,先到先得,崩了之后我再修改令牌! 但是你如果想做好一个项目的有收益的话,肯定是要付出的,就像你加入张哥的星球也是通过付费获得知识,这是同样的一个道理,就算之后可能会失败,没有收益,但是你收获到了技术上的知识,我想这也是不错的! 


    购买服务器(我以腾讯服务器作为例子)


    1、百度搜索「腾讯云」,学生党百度搜索「腾讯云校园服务」进入腾讯云网站首页


                        


    2、点击--产品--计算--云服务器


                                


    3、进入云服务器选购界面点击--立即购买,如果没有登录的话需要登录,自己的QQ号就可以;


                                


    5、选择需要的配置,提交订单支付即可

    一定要选择选择 Ubuntn Serve !

    一定要选择选择 Ubuntn   Serve !

    一定要选择选择 Ubuntn   Serve !


                            


    重要的事情说三遍,使用 Ubuntn 会比 window 方便太多了的,而且我也是用的Ubuntn,不怎么清楚其他的服务器,如果不知道用没关系,我会详细描述好操作的,而且作为一位优秀的程序员,你迟早的接触到 Linux ,没有图形界面的,这个时候了解一下,绝对是没有坏处的,只会让你变的更优秀!


    接口微信公众号如果你有了自己的服务器之后呢,你需要你的服务器与微信之间产生联系的,这里我们需要用到别人已经开发好的微信公众号开发框架  WeRoBot 建议看到这里了,去百度一下 WeRoBot 官方文档了解,否则可能会有点不知道什么意思!如果现在的你还处于迷茫的状态,也请硬着头皮操作下去,登录进入你的服务器, 现在我们先直接部署好,让你看到效果再解释原因的,看到现在的不懂 Ubuntn 下的 Vim 操作,可以现在就学下的,简单的基本操作,现在请执行好以下命令:


    vim rebot.py     //创建一个rebot.py 

    键盘按下 i      //切换到 vim 的输入模式   复制以下代码   


    import werobot

    robot = werobot.WeRoBot(token='tokenhere') 

    // tokenhere 这里自己可以随便填写的,比如 token = 'aaa'


    @robot.handler

    def hello(message):

        return 'Hello World!'


    # 让服务器监听在 0.0.0.0:80


    robot.config['HOST'] = '0.0.0.0'

    robot.config['PORT'] = 80

    robot.run()


    按下 Esc    然后按下  Shift + :      

      

    //切换到 Vim 下的命令模式 


    输入 wq                     

                     

    //保存并退出


    sudo python3 rebot.py       

       

    //运行程序rebot 接下来不用动了的,按下 Ctr + C 可以取消,但是现在不要动


                            


                           


    回到微信公众号的后台了,基本配置里面,将你的服务器IP 与令牌(token)

    就是你之前代码里写的那个 token ,填入微信公众号后台,消息加密,点随机生成,明文模式,点击启用,OK 到这里应该就是部署好了的,发送消息,微信就会自动回复hello world 是不是特别的激动,没错到了这里就说明接口配置已经成功完成好了的!甚至你还可以回复图文消息,将代码改成这样!相信某些聪明的人大概已经知道实现原理是什么了吧!


    import werobot

    robot = werobot.WeRoBot(token='tokenhere')

    @robot.text

    def articles(message):

        return [

            [

                "title",

                "description",

                "img",

                "url"

            ],

            [

                "whtsky",

                "I wrote WeRoBot",

                "https://secure.gravatar.com/avatar/0024710771815ef9b74881ab21ba4173?s=420",

                "http://whouz.com/"

            ]

        ]

    robot.run()





    这些代码在 Werobot 都可以看得到,所以要多看文档的,如果已经配置成功了的,可以留言扣个1 ,如果存在疑惑,不懂,请多看微信的官方文档以及 Werobot 的官方文档,多看官方文档是最好的学习方法,或者直接私聊我!!

    有人说:我把服务器退出了就实现不了呀,那么 Linux 的强大就体现出来了


    sudo nohup python3 rebot.py &


    一条命令,这样退出服务器,后台也是可以运行的!

    最后,你需要学什么:Vim 的基本操作,Ubuntn 的基本操作,以及 Werobot!终于完成好了服务器接口微信公众号后台了的,下次将会介绍如何建立好自己的数据库!




    推荐阅读:  开发微信公众号(一)



    PS:如果觉得文章还不错的话,还请大家点赞分享下。算是对「fightjiang」最大的支持!



           每 天 分 享 Python 干 货

         

    展开全文
  • 微信公众号+小程序开发

    千人学习 2019-08-05 11:45:27
    微信公众号+小程序开发》是结合了部分《微信开发深度解析》内容录制的系列课程,独立于书本,包含了更多的操作演示和案例演示。 课程内容分为两大部分: 第一部分:微信公众号及小程序开发基础技能 第二部分:...
  • 微信公众号开发小记(一)开篇

    万次阅读 2018-08-10 12:33:33
    接下来的时间里,我会以连载的形式分享微信公众号开发的相关文章,其中也会说一下我遇到的问题以及解决的思路,以及在开发过程中的一些感悟!因为是一个连载系列,所以会以一个初学者,也就是接触过编程但是没有接触...

    接下来的时间里,我会以连载的形式分享微信公众号开发的相关文章,其中也会说一下我遇到的问题以及解决的思路,以及在开发过程中的一些感悟!因为是一个连载系列,所以会以一个初学者,也就是接触过编程但是没有接触过微信公众号开发的角度去写文章,希望能给大家带来微信公众号开发相关知识的同时更多的给初学者一种解决问题的思路以及学习的方法!

    在我的印象当中,微信公众号开发好像一直都是PHP干的事,之前也从未接触过微信公众号开发,可以说是头一次做微信公众号开发的知识!

    因为一直在运营微信公众号,所以多多少少都会经常看到这个

    image

    也就是微信公众平台开发文档,但是一直觉得自己不会做这块,所以也就没有当回事,谁知世事难料,没想到有一天自己也做起了微信公众号的开发。

    那就开始吧!首先做微信公众号开发,你必须离不开的就是这个官方技术文档了,因为需要经常的去看,去查!建议先把这个技术文档看一遍!

    然后你就会看到很重要的一条文档,就是它

    image

    就是这个接入指南,有这么三个步骤

    1. 填写服务器配置
    2. 验证服务器地址的有效性
    3. 根据接口文档实现业务逻辑

    首先,作为一个初学者,肯定有些不懂,那该怎么办?这里的不懂应该就是这个服务器配置,什么玩意,什么服务器配置,如何验证以及实现业务逻辑?

    其实在做了一遍微信公众号开发之后发现,这个技术文档真的已经很详细了,仔细看技术文档,这三步都有解释,首先是这个服务器配置

    image

    这里面比较重要的就是这个URL,文档中解释这个URL是用来接收微信服务器发送过来的消息的,而下面的那个token则是做验证用的。

    首先,要明白先来看一张图

    image

    比如说,我们在手机上给微信公众号发送一个消息,这就相当于一个request请求,然后这个request到达微信服务器,紧接着微信服务器对这个request做出解析,然后开始响应一个response给你,这样你就收到了相应的回复。

    以上是正常的没经过对微信公众平台的二次开发的请求和响应,但是,现在我们进行了微信公众号的开发,就变成了这样

    image

    也就是说,当我们进行微信公众号的开发之后,用户的请求就不再有微信服务器去做处理了,而是由我们自己的服务做处理,然后把消息传给微信服务器,微信服务器再将消息返回给我们的用户。

    在这个过程中,微信服务器起了一个中间商的作用,所以经过这样的分析,微信公众号开发要把我的一点就是,你只要返回给微信服务器正确的数据,微信服务器就能帮你做正确的事情。

    所以作为微信公众号开发的第一步就是接入,你需要将自己的服务器和微信服务器做接通,只有接通之后,用户发送的请求到达微信服务器之后,微信服务器才知道该将这个请求转发给哪个服务器来处理。

    那么该如何接通,这就是技术文档中的接入指南三步走了,也就是这个

    1. 填写服务器配置
    2. 验证服务器地址的有效性
    3. 根据接口文档实现业务逻辑

    首先第一个问题就是这个服务器配置到底该填写啥,技术文档中说是填写一个url,可是这个url具体是什么呢?

    那首先就要搞明白,这个url是用来干嘛的,技术文档中说了,这个url是用来接收微信服务器发送过来的请求的,要对请求做处理?想一想,request?处理?该怎么做呢?

    看一段代码

    
    public class OneServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            super.doGet(req, resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            super.doPost(req, resp);
        }
    }

    你知道这个URL,也就是服务器配置该填写上什么了吗?

    未完待续!

    展开全文
  • 微信公众号开发教程(一) 验证接入

    万次阅读 多人点赞 2018-06-22 14:22:35
    微信公众号开发教程(一)验证接入本篇文章主要介绍了微信公众号开发接入详细流程,希望对刚接触公众号开发的同学有所帮助,有兴趣的同学可多多关注叩丁狼公众号,后续会更新不同的公众号小案例。公众号的分类我们平常...

    作者:陈惠,叩丁狼教育高级讲师。原创文章,转载请注明出处。

    微信公众号开发教程(一)验证接入

    本篇文章主要介绍了微信公众号开发接入详细流程,希望对刚接触公众号开发的同学有所帮助,有兴趣的同学可多多关注叩丁狼公众号,后续会更新不同的公众号小案例。

    公众号的分类

    我们平常在微信应用上会看到有很多的公众号,但是各自并不一样,公众号也分很多种类型,不过最常见的就是服务号和订阅号了。下面我们来看一下他们的区别:

    1、订阅号
    为媒体和个人提供一种信息传播方式,主要偏于为用户传达资讯(类似报纸杂志),主要的定位是阅读,每天可以群发1条消息;

    2、服务号
    为企业,政府或组织提供对用户进行服务,主要偏于服务交互(类似银行提供服务查询),每个月只可群发4条消息;

    3、企业微信(企业号)
    为企业,政府,事业单位,实现生产管理和协作运营的移动化,主要用于公司内部通讯使用,旨在为用户提供移动办公,需要先有成员的通讯信息验证才可以关注成功企业微信;

    通过以下图片我们可以更清晰的看出不同公众号的区别:

    分类.jpg

    区别.jpg

    还有一个比较明显的区别就是,订阅号都是存放在一个名叫订阅号的文件夹中,点开才能看到所有关注过的订阅号,但是服务号却和好友一样直接就显示在聊天列表中。这个大家打开微信客户端便能看到。

    如果大家有需要申请公众号的,要根据实际需求考虑清楚应该申请哪一种公众号
    以下是官方给出的建议,大家可以多参考参考

    1)如果想简单的发送消息,达到宣传效果,建议可选择订阅号;
    2)如果想用公众号获得更多的功能,例如开通微信支付,建议可以选择服务号;
    3)如果想用来管理内部企业员工、团队,对内使用,可申请企业号;
    4)订阅号可通过微信认证资质审核通过后有一次升级为服务号的入口,升级成功后类型不可再变;
    5)服务号不可变更成订阅号。

    4.测试号(用于开发测试及功能体验)
    这种是平常普通用户是涉及不到的,是专门为开发人员准备的一种仅用于测试的公众号。

    由于用户体验和安全性方面的考虑,微信公众号的注册有一定门槛,某些高级接口的权限需要微信认证后才可以获取。所以,为了帮助开发者快速了解和上手微信公众号开发,熟悉各个接口的调用,微信推出了公众帐号测试号,无需公众帐号、快速申请接口测试号,通过手机微信扫描二维码即可获得,利用测试号我们可以体验和测试更多高级功能。

    申请地址:
    http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

    但测试号也不是万能的,部分高级功能,如微信支付,卡券功能等也是不开放的。
    如果要实现支付功能还是得去注册个正式的公众号。

    微信公众平台:

    我们注册的公众号都可以在这个平台上进行管理,比如想弄一些自定义菜单,或者自动回复,或者平常推送的文章,都可以在这上面操作。

    平台地址:
    http://mp.weixin.qq.com

    平台中分为两种管理模式:

    平台提供了两种管理模式给我们,应该根据我们的需求来选择使用不同的模式。

    下面我们来了解一下,两种模式的区别:

    编辑模式

    主要针对非编程人员及信息发布类公众帐号使用。
    开启该模式后,可以方便地通过界面配置“自定义菜单”和“自动回复的消息”。
    好处是可视化界面配置,操作简单,快捷,但是功能有限。

    开发模式

    主要针对具备开发能力的人使用。
    开启该模式后,能够使用微信公众平台开放的接口,但是编辑模式的设置会失效,比如“自定义菜单”和“自动回复的消息”功能。通过编程方式可以实现更多复杂的功能,提供个性化服务。

    总的来说,编辑模式就是为所有人提供的,如果你的需求仅仅只是最常见的菜单,自动回复等,使用编辑模式已经满足,但是如果你需求的功能比较复杂,有很多很多的想法,就需要使用到开发模式。

    下面我们来学习一下,怎么使用这个开发模式。

    开发模式配置流程

    1.登录测试号页面,可以看到该测试号相关的信息

    就是使用电脑打开http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
    使用微信扫一扫二维码,即可在打开的页面中看见微信给你分配的测试号的相关信息。

    下面两个属性是唯一的标识,每个测试号都会有自己的appid与appsecret ,是比较重要的信息,不要随意发给别人。

    appid:是公众号开发识别码,配合开发者密码可调用公众号的接口能力。
    appsecret:是校验公众号开发者身份的密码,具有极高的安全性。

    测试号信息.png

    如果是正式的公众号,登录公众平台官网之后,找到“基本配置”菜单栏也可以获取上公众号相关的信息。

    2.配置参数介绍

    再往下看,我们会看到URL和Token这两个属性,和上面appid/appsecret不同的是,上面的是微信分配给我们的,但是下面这两个是需要我们填进去的。

    我们先来了解一下,这两个属性有什么作用。

    URL:就是指我们自己的服务器地址
    该URL是开发者用来接收和响应微信消息和事件的接口URL
    (必须以http://或https://开头,分别支持80端口和443端口)

    Token:可任意填写,用作生成签名(必须为英文或数字,长度为3-32字符)
    该签名在后边会用到,这里暂时随便填个内容也可以

    接口信息配置.png

    接下来我们需要了解的是微信与我们的服务器交互的过程:

    当我们在微信app上,给公众号发送一条内容的时候,实际会发送到微信的服务器上,此时微信的服务器就会对内容进行封装成某种格式的数据比如xml格式,再转发到我们配置好的URL上,所以该URL实际就是我们处理数据的一个请求路径。所以该URL必须是能暴露给外界访问的一个公网地址,不能使用内网地址,生产环境可以申请腾讯云,阿里云服务器等,但是在开发环境中可以暂时利用一些软件来完成内网穿透,便于修改和测试,如NATAPP,花生壳等软件,使用起来也很方便,在本地安装对应的软件,配置运行后,直接使用软件分配的临时域名来访问本地应用即可,只是偶尔会存在网络不稳定的情况。这里不详细介绍如何使用了,具体教程可参考软件官网。

    交互流程.png

    在开发的过程中,我们会经常使用到微信公众号提供给开发者的开发文档
    具体地址:https://mp.weixin.qq.com/wiki
    大家打开后可以选择”接入指南”,参考微信提供的一些帮助信息。

    3.搭建本地应用(java/python/php等语言均可)

    基本概念都了解过后,我们马上就要开始开发了,因此需要先提供好一个应用,接下来就可以在该应用上添加公众号相关的功能了。

    本文项目使用java语言,SpringMVC+Spring+MyBatis框架

    4.URL接入验证

    我们需要先来了解一下接入的过程是怎么样的。下图是微信官方对接入过程的介绍。

    图片.png

    由以上介绍可知,当我们填入url与token的值,并提交后,微信会发送一个get请求到我们填写的url上,并且携带4个参数,而signature参数结合了开发者填写的token参数和请求中的timestamp参数、nonce参数来做的加密签名,我们在后台需要对该签名进行校验,看是否合法。实际上,我们发现微信带过来的4个参数中并没有带token参数,仅有signature是和token有关的,所以我们应该在本地应用中也准备一个和填入的token相同的参数,再通过微信传入的timestamp与nonce做相同算法的加密操作,若结果与微信传入的signature相同,即为合法,则原样返回echostr参数,代表接入成功,否则不做处理,则接入失败。

    详细流程可参考微信官方提供的逻辑流程图,我们的应用需要以该流程图的步骤来实现。

    图片.png

    代码示例:

    @Controller
    public class WeChatController {
            /**
             * 微信URL接入验证
             * @param signature
             * @param timestamp
             * @param nonce
             * @param echostr
             * @return
             */
            @RequestMapping(value="/weChat",method= RequestMethod.GET)
            @ResponseBody
            public String validate(String signature,String timestamp,String nonce,String echostr){
                //1. 将token、timestamp、nonce三个参数进行字典序排序
                String[] arr = {timestamp,nonce,WeChatUtil.TOKEN};
                Arrays.sort(arr);
                //2. 将三个参数字符串拼接成一个字符串进行sha1加密
                StringBuilder sb = new StringBuilder();
                for (String temp : arr) {
                   sb.append(temp);
                }
                //3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
                if(SecurityUtil.SHA1(sb.toString()).equals(signature)){
                    //接入成功
                    return echostr;
                }
                //接入失败
                return null;
            }
    }
    

    备注:

    1. 代码中WeChatUtil.TOKEN是一个常量,常量值必须要和我们在页面上填入的token值相同,通常可以抽取到配置文件中来注入值比较灵活。
      2.SecurityUtil是一个工具类,提供了sha1加密的方法。

    接入成功后即可根据开发文档实现一些小案例了。文章暂时使用的是测试号来做开发,后续有些高级功能权限不够可能会改成正式公众号来进行开发。


    展开全文
  • 微信公众号+vue+微信支付

    万次阅读 热门讨论 2018-07-11 14:25:32
    在上一篇文章中本人讲述了微信公众号的授权以及获取用户信息,在此基础上今天这篇博客跟大家分享一下微信支付的流程及代码,还有自己在开发时的一些坑。1、在进行微信支付时,除了需要一个公众号之外,你还需要一个...

    在上一篇文章中本人讲述了微信公众号的授权以及获取用户信息,在此基础上今天这篇博客跟大家分享一下微信支付的流程及代码,还有自己在开发时的一些坑。

    1、在进行微信支付时,除了需要一个公众号之外,你还需要一个微信商户。根据商户申请规则进行商户申请

    2、开始配置开发所需要的参数如下所示:


    这是公众号的基本开发配置,这里在微信授权的时候就已经需要配置了 但是注意AppSecret在你第一次配置的时候就需要备份下来,如果没有备份那么下次使用的话你就需要去重置它


    网页域名授权,你需要填写正确的可以访问的项目域名,确保微信可以访问

    3、公众号配置好后我们需要开始配置微信商户平台的内容了

    商户平台需要进行的配置是:商户号,支付密钥

    商户号一般都是和自己公众号的商户号是一样的

    主要是一个支付密钥的配置


    然后是域名配置 和公众号差不多


    配置支付的参数完成之后就可以开始进行开发了  不过在支付开发中可能会有些许的麻烦  那就是你不能在线下本机测试,因为IP白名单的限制  除非你将自己的本机地址进行地址映射,但是映射操作比较繁琐,如果自己的项目不是很大的话那就自己麻烦一点部署项目然后进行测试吧,如果你想进行映射之后本机测试这里可以推荐一个组件给你访问链接https://natapp.cn/

    4、开始正式的代码书写 这里使用的SDK是(

    (1)后台进行支付配置: 

               //实例配置

                var config = new WeChatConfig()
                {
                    AppId = "wx7a87835d950f228f",
                    AppSecret = "97d8581300ed49326c53db5373e07104",
                    MchId = "1502779501",
                    Notify = "http://medicalapi.xin-lai.com/PayNotify/0/wechat",//这是支付回调路径(不是前端路径,这个很坑)
                    TenPayKey = "wlsoftnewhissong3355180meiyanfei",  
                    PayAppId = "wx7a87835d950f228f"
                };
                WeChatSDKBuilder.Create()
                    //设置日志记录
                    .WithLoggerAction((tag, message) =>
                    {
                        logger.Debug(string.Format("Tag:{0}\tMessage:{1}", tag, message));
                    })
                    //注册Key。不再需要各个控制注册
                    .Register(WeChatFrameworkFuncTypes.GetKey, model =>
                        {
                            return "wx8370799bb85178a8";
                        }
                    )
                    //注册获取配置函数:根据Key获取微信配置(加载一次后续将缓存)
                    .Register(WeChatFrameworkFuncTypes.Config_GetWeChatConfigByKey,
                        model =>
                        {
                            return config;
                        })
                   //注册微信支付配置
                   .Register(WeChatFrameworkFuncTypes.Config_GetWeChatPayConfigByKey, model =>
                        {
                            return config;
                        }
                   )

                    .Build();

    你可以将config写在项目的配置文件中然后进行获取  我这里是直接实例化直接了当

    (2)支付还需要配置回调处理逻辑:

    //支付回调设置
                PayNotifyBuilder
                    .Create()
                //设置日志记录
                .WithLoggerAction((tag, message) =>
                {
                    logger.Debug(string.Format("Tag:{0}\tMessage:{1}", tag, message));
                }).WithPayNotifyFunc(async(input) =>
                {
                    switch (input.Provider)
                    {
                        case "wechat":
                            {
                                var api = new WeChatPayApi();
                                var output = api.PayNotifyHandler(input.Request.Body);
                                if (output.IsSuccess())
                                {
                                    bool theresult = true;
                                    var resultLog = output.ToJsonString();
                                    logger.Debug("微信支付处理成功: " + resultLog);
                                    //判断支付类别并编辑处理
                                    if (output.Attach.StartsWith("门诊"))
                                    {
                                        OutpatientsAppService outpatientsAppService = new OutpatientsAppService(new XmlSerializeAppService());
                               theresult= await outpatientsAppService.LoadChargeListInfo(new Outpatients.Dto.LoadChargeListInfoinput()
                                        {
                                            patCardNo = output.Attach.Substring(2),
                                            psOrdNum = output.TransactionId,
                                            hisOrdNum = output.OutTradeNo,
                                            payMode = "WXPay",
                                            payAmt = Convert.ToDecimal(output.TotalFee) % 100,
                                            payTime =output.TimeEnd,
                                            patCardType= "院内诊疗卡",
                                            agtOrdNum= output.Attach.Substring(2),
                                        });
                                    }
                                    else if (output.Attach.StartsWith("住院"))
                                    {
                                        logger.Debug("进入住院缴费!");
                                    }
                                    else if (output.Attach.StartsWith("挂号"))
                                    {
                                        RegistrationsAppService registrationsAppService = new RegistrationsAppService(new XmlSerializeAppService());
                                        theresult= await registrationsAppService.RegistPay(output.Attach.Substring(2));


                                    }


                                    if (theresult == true)
                                    {
                                        logger.Debug(output.Attach.Substring(0, 2) + "缴费支付完成!");
                                        logger.Debug("缴费卡号!"+output.Attach.Substring(2));
                                    }
                                    else
                                    {
                                        logger.Debug(output.Attach.Substring(0,2)+"缴费支付未完成!");
                                    }
                                }
                                else
                                {
                                    //此处编写失败处理逻辑
                                    var failLog = output.ToJsonString();
                                    logger.Error("微信支付处理失败: " + failLog);


                                    return await Task.FromResult("<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[回调处理失败]]></return_msg></xml>");
                                }

                            }
                            break;
                        default:
                            break;
                    }
                    return null;

                }).Build();

    (3)支付接口的封装与调用

    先是进行微信统一下单

     /// <summary>
        /// 支付接口实现类
        /// </summary>
        [Produces("application/json")]
        [Route(ApiPrefix + "[controller]")]
        public class WhechatPayAppService : AppServiceBase, IwhechatPayAppService
        {
            /// <summary>
            /// 依赖注入
            /// </summary>
            private readonly IHttpContextAccessor _httpContextAccessor;


            public WhechatPayAppService(IHttpContextAccessor httpContextAccessor)
            {
                _httpContextAccessor = httpContextAccessor;
            }
            /// <summary>
            /// 下单 获取微信支付授权
            /// </summary>
            /// <param name="input"></param>
            /// <returns></returns>
            [AbpAllowAnonymous]
            [HttpPost("GetPayurl")]
            public async Task<UnifiedorderResult> GetPayurl(Payinfoinput input)
            {
                //获取实际IP
                string clientIp = null;
                if (clientIp.IsNullOrWhiteSpace())
                    clientIp = _httpContextAccessor.HttpContext?.Connection?.RemoteIpAddress?.ToString();


                clientIp = clientIp ?? "8.8.8.8";


                using (UnitOfWorkManager.Current.DisableFilter(AbpDataFilters.MayHaveTenant, AbpDataFilters.MustHaveTenant))
                {
                    var config = WeChatConfigManager.Current.GetPayConfig();
                    var result = WeChatApisContext.Current.TenPayV3Api.Unifiedorder(new WeChat.SDK.Pays.TenPayV3.UnifiedorderRequest
                    {
                        Body = input.Body,
                        OpenId = input.OpenId,
                        TimeStart = DateTime.Now.ToString("yyyyMMddHHmmss"),
                        TimeExpire = DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"),
                        TradeType = "JSAPI",
                        DeviceInfo = "WEB",
                        TotalFee =Convert.ToInt32(input.Cash * 100).ToString(),
                        OutTradeNo = input.OutTradeNo,
                        SpbillCreateIp = clientIp,
                        Attach=input.Attach,
                    });
                    if (result.ReturnCode == "FAIL")
                        throw new UserFriendlyException(result.Message);
                    var dict = new Dictionary<string, string>
                    {
                        {"appId", result.AppId},
                        {"timeStamp", PayUtil.GetTimestamp()},
                        {"nonceStr", result.NonceStr},
                        {"package", "prepay_id=" + result.PrepayId},
                        {"signType", "MD5"}
                    };
                    dict.Add("paySign", PayUtil.CreateMd5Sign(dict, WeChatConfigManager.Current.GetPayConfig().TenPayKey));


                    return new UnifiedorderResult
                    {
                        MWebUrl = null,
                        PrepayId = "prepay_id=" + result.PrepayId,
                        TradeType = result.TradeType,
                        AppId = result.AppId,
                        paySign= dict["paySign"],
                        nonceStr = result.NonceStr,
                        timeStamp= dict["timeStamp"],
                        msg=result.ErrCodeDes,
                    };
                }
            }

    前端调用统一下单接口 发起支付


    统一下单完成之后  用完成返回的参数唤起支付


    前端js会返回支付的结果给你  同时后台会异步的根据你配置的url返回支付回调的信息 

    坑:当微信支付完成页面收起之后,会回到你原来的页面  但是这时你的这个页面是没有路径的

    在这里一般前端只做简单的页面处理,后台进行具体业务处理如上述支付回调配置所述   这样你的支付就完成了  

    相比微信授权来说 公众号的内容就比较好理解了!  

    展开全文
  • 微信公众号开发基本配置

    万次阅读 2018-05-23 15:25:19
    最近在做一个微信公众号内置商城的项目,势必需要接触到一些简单的微信公众号的东西.下面,就对微信公众号开发的一些必要配置做一些简单说明.1.AppID和AppSecret以及IP白名单首先,你需要一个公众号,当然公司一般都会...
  • 微信公众号开发——项目搭建

    万次阅读 2018-09-11 15:23:25
    前往微信公众平台(https://mp.weixin.qq.com/)获取开发权限和开发账号,公众号分为好几种,小程序,订阅号,服务号,企业号,个人只能用订阅号,权限比较少(api接口权限); 二 想要自定义模块功能或者是回复...
  • 项目实现地址。查看我的[Github地址]... 目前具体可获取指标(包含但不局限):阅读数、点赞数(在看)、评论内容及总数、正文内容及图片、是否为头条、是否为原创。
  • 免费创建微信公众号全攻略

    万次阅读 2016-03-11 22:08:56
    微信的平台分为公众平台和开放平台。 公众平台就是面向公众的平台。 分为3类: 订阅号 : 发布信息用的,面向个人或企业俗称自媒体(无微信支付), 。 服务号 : 面向企业的公众平台,比如招行等企业的应用(和钱有关)。 ...
  • 如何创建一个微信公众号

    万次阅读 2018-08-29 21:46:46
    最近有不少问我怎样从0创建一个微信公众号,简单指导之后感觉大家都不太明白,所以打算写一篇教程文章来告诉大家如何创建订阅号,欣然提笔! 这里我们首先打开网址https://mp.weixin.qq.com/,我们会看到下面的界面...
  • 本文代码基于微信开发文档-用户管理一节编写 在使用代码之前请确认你已阅读并理解上面提到的 package cn.dbw.luckwheel.config; import cn.dbw.luckwheel.po.LuckUser; import cn.dbw.luckwheel.po.WxPojo; import...
  • 用Django开发微信公众号

    千次阅读 2018-12-11 16:48:28
    用Django开发微信公众号 准备工作: 1.申请一个微信公众号 2.安装Python,PyCharm,下载wechatpy(pip install wechatpy) 3.服务器 如是自己没有服务器,下载ngrok ,ngrok 是一个反向代理,通过在公共端点和本地运行...
  • 微信公众号开发(一)服务器及接口的配置

    万次阅读 多人点赞 2019-05-22 09:21:41
    微信公众号开发(一)服务器及接口的配置 关于微信公众号中的订阅号和服务的区别这里不多加讨论,网上有很多资源可以搜到,这里直接进入正题,如果是个人开发者,这里建议使用测试号进行开发学习,测试号的权限要比...
  • 关于python爬取搜狗微信公众号文章永久链接 本文主要讲解思路,代码部分请自行解决 搜狗微信搜素获取公众号及文章 通过微信公众平台获取永久链接 python+scrapy框架 mysql数据库存储+读取公众号 获取搜狗...
  • 微信公众号主要面向名人、政府、媒体、企业等机构推出的合作推广业务。在这里可以通过微信渠道将品牌推广给上亿的微信用户,减少宣传成本,提高品牌知名度,打造更具影响力的品牌形象。 3. 公众平台 微信公众平...
  • 微信公众号之开发者工具

    万次阅读 2020-04-06 16:49:32
    一、前言 这次的项目主要是关于微信公众号的一个开发,本人这次分配的模块是后台微信公众号的支付和退款,第一次接触微信公众的项目刚开始一脸懵逼,开发过程中遇到各种坑,所以想自己写一篇详细的关于微信公众号的...
  • 微信公众号网页授权登录

    万次阅读 2018-09-11 09:08:37
    微信公众号网页授权登录: 前端时间做了一个微信公众号的项目,就是微信公众号的菜单点击我的个人中心,就向用户授权登录 获取用户的信息,进行业务逻辑的操作,微信公众号官方文档,这是我写的文章,里面有很多...
  • 如果公司需要开发小程序,首先要在公司微信公众号里面申请小程序,快速开通并认证之后才能使用。微信最新推出,只要认证过微信公众号,那么接着认证微信小程序就可以复用微信公众号资质注册小程序流,快速注册认证小...
  • 微信小程序与微信公众号同一用户登录问题 最近在做微信小程序与微信公众号登录合并的接口。整理相关资料以及个人认识的心得写了这篇文章与大家一起分享。 首先,简单说下我遇到的问题是我们的程序调用微信...
1 2 3 4 5 ... 20
收藏数 268,407
精华内容 107,362
关键字:

微信公众号