企业微信支付的发送红包及相关接口使用

企业微信的支付自从企业号变化为企业微信后,增加了一些支付接口以及对很多接口进行了调整,企业微信的支付处理也是变化了不少,往往有时候碰到不少坑,一步一个脚印趟过来的;企业微信支付是需要结合微信商户后台进行处理,有时候也需要设置好商户平台的相关处理,才能进行发送红包、支付到个人等等支付处理。本篇随笔介绍在企业微信的支付处理中的发送红包的操作相关内容。

1、企业微信的支付接口

我们查看企业微信API的目录,可以看到企业微信支付的相关介绍,如下所示。

1)常见错误处理

企业微信支付,经常见到的错误信息,就是签名错误这个操作,这个很多人出招,解决方法各种各样,其实很多可能是不符合的,这样排查问题起来就很吃力。

这里需要遵循官方的解析进行排查,特别对参数的顺序和数量进行核对,注意不要增加多一个参数,否则都容易出现签名错误。

我就是在官方需要参数都有了,打印输出的格式也没问题,就是不小心多了一个参数(还是升级前有的一个),导致错误很难排查,弄得很头大。

一般来说发送企业红包,很容易发生签名错误的情况,请检查以下内容 1、企业微信的CorpID/CorpSecret 2、企业微信的支付Secret和商户的API支付秘钥 3、参数不能多也不能少(重要),如很多时候由于版本原因这里不小心多了一个total_num导致签名错误 4、商户平台的证书和密码是否正确

另外,除了这些问题外,重要的问题就是签名的处理了,微信支付除了有一个常规的签名sign参数外,还增加了一个workwx_sign的参数,两者的规则是不同的。

workwx_sign参数在前,使用系统给出的计算方式计算后,然后在计算sign参数,sign参数的计算是包含本身之外的所有参数进行计算,包括了workwx_sign参数。

2)签名参数处理

对于企业微信的签名workwx_sign参数,不要将参数全部参与计算签名,否则会返回微信签名错误!

发红包api固定如下几个字段参与签名:act_namemch_billnomch_idnonce_strre_openidtotal_amountwxappid

付款api固定如下几个字段参与签名:amountappiddescmch_idnonce_stropenidpartner_trade_noww_msg_type

计算企业微信签名的字符串最后拼的secret是企业微信管理端支付应用页面的secret,如下图所示。

示例:请求内容:act_name XXXmch_billno 11111234567890mch_id 10000098nonce_str qFKEgfig76DF9912fewmkpre_openid oxTWIuGaIt6gTKsQRLau2M0yL16Etotal_amount 100wxappid wx123456789

第一步: 对参数按照key=value的格式,并按照参数名ASCII字典序排序如下stringA=”act_name=XXX&mch_billno=11111234567890&mch_id=10000098&nonce_str=qFKEgfig76DF9912fewmkp&re_openid=oxTWIuGaIt6gTKsQRLau2M0yL16E&total_amount=100&wxappid=wx123456789第二步:拼接企业微信支付应用secret(参见企业微信管理端支付应用页面):stringSignTemp=”stringA&secret=192006250b4c09247ec02edce69f6a2d”sign=MD5(stringSignTemp).toUpperCase()

2、企业微信发送红包

测试企业微信发送红包和直接支付的接口,响应效果如下所示

在企业微信中,常用到的企业微信的userid,不过发送红包则需要把userid转换为微信的openid进行使用,转换函数根据UserID 换取用户的OpenId 如下。

一般封装一个函数来使用即可。

GetOpenId( ICorpBasicApi basicAPi = basicAPi.ConvertToOpenId(

发送企业红包调用如下代码所示

SendRedPackJson packJson = = == = = = = openid <span style="color: #008000;">//<span style="color: #008000;">调用发送企业红包接口发送
<span style="color: #0000ff;">var
result = hbApi.SendWorkRedPack(packJson);

函数SendWorkRedPack的实现内容如下所示。

</span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;加入常规的参数</span> WxPayData data = <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; WxPayData(); data.SetValue(</span><span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;nonce_str</span><span style="color: #800000;"&gt;"</span>,data.GenerateNonceStr());<span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;随机字符串 </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;商户订单号(每个订单号必须唯一) 组成:mch_id+yyyymmdd+10位一天内不能重复的数字。 </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;接口根据商户订单号支持重入,如出现超时可再调用。</span> data.SetValue(<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;mch_billno</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;,data.GenerateOutTradeNo(AccountInfo.MchID)); data.SetValue(</span><span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;mch_id</span><span style="color: #800000;"&gt;"</span>,AccountInfo.MchID);<span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;商户号</span> data.SetValue(<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;wxappid</span><span style="color: #800000;"&gt;"</span>,AccountInfo.AppID);<span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;公众账号appid</span>

<span style="color: #000000;">
data.SetValue(<span style="color: #800000;">"<span style="color: #800000;">sender_name<span style="color: #800000;">",AccountInfo.Name);<span style="color: #008000;">//<span style="color: #008000;">红包发送者名称
<span style="color: #008000;">//<span style="color: #008000;">发送者头像,此id为微信默认的头像(如果想自定义头像,请参见第三部分)
data.SetValue(<span style="color: #800000;">"<span style="color: #800000;">sender_header_mediaid<span style="color: #800000;">",<span style="color: #800000;">"<span style="color: #800000;">1G6nrLmr5EC3MMb-zK1dDdzmd0p7cNliYu9V5w7o8K0<span style="color: #800000;">"<span style="color: #000000;">);

        </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;以企业应用的名义发红包,企业应用id,整型,
        </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;可在企业微信管理端应用的设置页面查看。与sender_name互斥,二者只能填一个。
        </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;data.SetValue("agentid","3010046");</span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;    企业应用id

        </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;发放红包使用场景,红包金额大于200时必传 </span>
        <span style="color: #0000ff;"&gt;if</span> (!<span style="color: #0000ff;"&gt;string</span><span style="color: #000000;"&gt;.IsNullOrEmpty(json.scene_id))
        {
            data.SetValue(</span><span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;scene_id</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;,json.scene_id);
        }

        data.SetValue(</span><span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;re_openid</span><span style="color: #800000;"&gt;"</span>,json.re_openid);<span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;接受红包的用户.用户在wxappid下的openid。</span>
        data.SetValue(<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;total_amount</span><span style="color: #800000;"&gt;"</span>,json.total_amount);<span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;金额</span>
        data.SetValue(<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;wishing</span><span style="color: #800000;"&gt;"</span>,json.wishing);<span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;红包祝福语</span>
        data.SetValue(<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;act_name</span><span style="color: #800000;"&gt;"</span>,json.act_name);<span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;项目名称</span>
        data.SetValue(<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;remark</span><span style="color: #800000;"&gt;"</span>,json.remark);<span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;备注</span>

<span style="color: #000000;">
data.SetValue(<span style="color: #800000;">"<span style="color: #800000;">workwx_sign<span style="color: #800000;">",data.MakeWorkWxSign(AccountInfo.CorpPaySecret));<span style="color: #008000;">//<span style="color: #008000;">企业微信签名
data.SetValue(<span style="color: #800000;">"<span style="color: #800000;">sign<span style="color: #800000;">"<span style="color: #000000;">,data.MakeSign(AccountInfo.PayAPIKey));

        </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;发送企业红包,很容易发生签名错误的情况,请检查以下内容
        </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;1、企业微信的CorpID/CorpSecret
        </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;2、企业微信的支付Secret和商户的API支付秘钥
        </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;3、参数不能多也不能少(重要),很多时候由于版本原因这里不小心多了一个total_num导致签名错误
        </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;4、商户平台的证书和密码是否正确</span>

        <span style="color: #0000ff;"&gt;var</span> url = <span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;https://api.mch.weixin.qq.com/mmpaymkttransfers/sendworkwxredpack</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;;
        </span><span style="color: #0000ff;"&gt;return</span> Helper.GetPayResultWithCert<SendRedPackResult><span style="color: #000000;"&gt;(data,url,AccountInfo.CertPath,AccountInfo.CertPassword);
    }</span></pre>

其实以上很多参数大家应该都很了解,相对于来说MakeWorkWxSign 和 MakeSign 就是这里的关键处理,而前者正是很多人没有处理好的问题所在。

下面把相关函数贴出来,方便对照了解下吧,其实下面这些函数是放在WxPayData类里面,统一管理处理对应的签名的。

ToWorkWxUrl(<> paramRedPack = List<>() { ,,,,,,<> paramPay = List<>() { ,,,,, </span><span style="color: #0000ff;"&gt;string</span> buff = <span style="color: #800000;"&gt;""</span><span style="color: #000000;"&gt;; </span><span style="color: #0000ff;"&gt;foreach</span> (KeyValuePair<<span style="color: #0000ff;"&gt;string</span>,<span style="color: #0000ff;"&gt;object</span>> pair <span style="color: #0000ff;"&gt;in</span><span style="color: #000000;"&gt; Values) { </span><span style="color: #0000ff;"&gt;if</span> (pair.Value != <span style="color: #0000ff;"&gt;null</span> &amp;&amp; pair.Value.ToString() != <span style="color: #800000;"&gt;""</span><span style="color: #000000;"&gt;) { </span><span style="color: #0000ff;"&gt;if</span><span style="color: #000000;"&gt; (isRedPack) { </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;发送红包的签名字段</span> <span style="color: #0000ff;"&gt;if</span><span style="color: #000000;"&gt; (paramRedPack.Contains(pair.Key)) { buff </span>+= pair.Key + <span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;=</span><span style="color: #800000;"&gt;"</span> + pair.Value + <span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;&amp;</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;; } } </span><span style="color: #0000ff;"&gt;else</span><span style="color: #000000;"&gt; { </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;付款的签名字段</span> <span style="color: #0000ff;"&gt;if</span><span style="color: #000000;"&gt; (paramPay.Contains(pair.Key)) { buff </span>+= pair.Key + <span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;=</span><span style="color: #800000;"&gt;"</span> + pair.Value + <span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;&amp;</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;; } } } } buff </span>= buff.Trim(<span style="color: #800000;"&gt;'</span><span style="color: #800000;"&gt;&amp;</span><span style="color: #800000;"&gt;'</span><span style="color: #000000;"&gt;); </span><span style="color: #0000ff;"&gt;return</span><span style="color: #000000;"&gt; buff; } </span><span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;<summary></span> <span style="color: #808080;"&gt;///</span><span style="color: #008000;"&gt; 生成企业微信签名 </span><span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;</summary></span> <span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;<param name="corpPaySecret"&gt;</span><span style="color: #008000;"&gt;企业支付的Secret</span><span style="color: #808080;"&gt;</param></span> <span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;<param name="isRedPack"&gt;</span><span style="color: #008000;"&gt;是否为发送红包操作,或者是付款操作,两者需要签名的字段不同</span><span style="color: #808080;"&gt;</param></span> <span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;<returns></returns></span> <span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;string</span> MakeWorkWxSign(<span style="color: #0000ff;"&gt;string</span> corpPaySecret,<span style="color: #0000ff;"&gt;bool</span> isRedPack = <span style="color: #0000ff;"&gt;true</span><span style="color: #000000;"&gt;) { </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;转url格式</span> <span style="color: #0000ff;"&gt;string</span> str =<span style="color: #000000;"&gt; ToWorkWxUrl(isRedPack); </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;在string后加入secret</span> str += <span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;&amp;secret=</span><span style="color: #800000;"&gt;"</span> +<span style="color: #000000;"&gt; corpPaySecret; </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;MD5加密</span> <span style="color: #0000ff;"&gt;var</span> md5 =<span style="color: #000000;"&gt; MD5.Create(); </span><span style="color: #0000ff;"&gt;var</span> bs =<span style="color: #000000;"&gt; md5.ComputeHash(Encoding.UTF8.GetBytes(str)); </span><span style="color: #0000ff;"&gt;var</span> sb = <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; StringBuilder(); </span><span style="color: #0000ff;"&gt;foreach</span> (<span style="color: #0000ff;"&gt;byte</span> b <span style="color: #0000ff;"&gt;in</span><span style="color: #000000;"&gt; bs) { sb.Append(b.ToString(</span><span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;x2</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;)); } </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;所有字符转为大写</span> <span style="color: #0000ff;"&gt;return</span><span style="color: #000000;"&gt; sb.ToString().ToUpper(); }</span></pre>
MakeSign( str = str += + md5 = bs = sb = ( b result =

3、企业微信直接支付的接口

对照这些官方资料,我们可以编写对应的接口API来处理。

= ,AccountInfo.AppID); data.SetValue(,AccountInfo.MchID); data.SetValue(,data.GenerateNonceStr()); data.SetValue(,NetworkUtil.GetIPAddress()); data.SetValue(,data.GenerateOutTradeNo(AccountInfo.MchID)); ,json.device_info); data.SetValue( data.SetValue(</span><span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;sign</span><span style="color: #800000;"&gt;"</span>,data.MakeSign(AccountInfo.PayAPIKey));<span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;最后生成签名</span> <span style="color: #0000ff;"&gt;var</span> url = <span style="color: #0000ff;"&gt;string</span>.Format(<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;); </span><span style="color: #0000ff;"&gt;return</span> Helper.GetPayResultWithCert<CorpPayResult><span style="color: #000000;"&gt;(data,AccountInfo.CertPassword); }</span></pre>

其中里面的很多参数的处理是和前面支付差不多的,因此不再赘述

调用的处理代码如下所示

CorpPayJson json = = == == = = result = api.CorpPay(json);

 

最新的第一条就是直接付款的信息提示。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


判断H5页面环境在微信中还是小程序中 用小程序提供的wx.miniProgram.getEnv可以获取环境参数 &lt;script type=&quot;text/javascript&quot; src=&quot;https://res.wx.qq.com/open/js/jweixin-1.
wx.reLaunch和wx.navigateTo,wx.navigateTo的区别 2019-03-23 11:18:05 wx.navigateTo 用于保留当前页面、跳转到应用内的某个页面,使用 wx.navigateBack可以返回到原页面。对于页面不是特别多的小程序,通常推荐使用 wx.n
微信小程序如何从数组里取值_微信小程序 传值取值的几种方法总结 小程序里常见的取值有以下几种,一个完整的项目写下来,用到的概率几乎是100%。 列表index下标取值 页面传值 form表单取值 1. 列表index下标取值 实现方式是:data-index=&quot;{{index}}&quot
H5项目接入微信授权登录,通过 UA 区分微信还是普通浏览器: let&#160;ua&#160;=&#160;navigator.userAgent.toLowerCase(); let&#160;isWeixin&#160;=&#160;ua.indexOf(&#39;micromessenge
微信小程序获取data-xx=&quot;&quot;属性的值,自定义属性设置和获取(data-) 微信小程序&lt;view class=&quot;details-btn&quot; data-taskId=&quot;111&quot; bindtap=&#39;taskdetails&#39
小程序报错:TypeError: Cannot read property ‘addEventListener‘ of undefined 解决办法 将调试基础库由2.16.0(或者当前的) -&gt; 2.14.1 解决问题
H5跳转微信小程序-成功案例(VUE)(踩坑无数) TuoMei 已于 2022-07-29 09:52:22 修改 准备工作 根据官方提供的资料需准备以下几点: 1、已认证的服务号 2、绑定JS接口安全域名 (在微信公众平台设置) 3、IP白名单 (在微信公众平台设置) 4、将小程序和H5公众号进
微信小程序 页面跳转和数据传递实例详解 这篇文章主要介绍了微信小程序 页面跳转和数据传递实例详解的相关资料,这里附有实例代码帮助到家学习理解,需要的朋友可以参考下 微信小程序 页面跳转和数据传递 1.先导 在Android中,我们Activity和Fragment都有栈的概念在里面,微信小程序页面也
情景1.拉取公司代码演示: 因为github有墙,这里我们以gitee(码云)为例作为演示 (其实就是国产github,也非常好用~) 步骤一:打开Git界面 先在一个空文件夹右击Git Bash Here,打开git界面 步骤二:输入克隆远程仓库指令 别人复制的链接在这里获取 拿到别人赋值的链接自
如何开发微信小程序? 作为一名10多年一直从事互联网平台开发的从业者,我来回答下这个问题吧。 微信小程序开发流程总体可以归纳为4个步骤, 老张带您捋一捋整个环节,小白用户可以收藏了。 好了废话不多说,开始! 一、开发前小程序需要准备的资料 我们在开发微信小程序前,需要准备下相关资料。这个资料主要是后
原生小程序开发优化方案 为了更好的制定优化方案,我们 有必要先了解下小程序的底层架构、以及与普通网页开发的差异 小程序最终渲染载体与当下一些热门的技术 Flutter、React Native等不同,依然是浏览器内核,而不是原生客户端。 而对于传统的网页来说,UI 渲染和 JS 脚本是在同一个线程中
1,不要下两倍尺寸的图片, 小程序本身自己就会对元素缩小两倍,设计图片的一杯就已经很清晰了。 2,图片压缩,(主要是压缩静态资源,ps 可以压缩,然后有一些在线压缩工具,保持600-800kb 的静态) 3,通用的代码组件化 4,是在工程量太大可以分包,分包现在最大支持20m(一般都不会去分包的)
文章浏览阅读189次。人工智能研究实验室OpenAI在2022年11月30日发布了自然语言生成模型ChatGPT,上线两个月就已经超过一亿用户,成为了人工智能界当之无愧的超级大网红。ChatGPT凭借着自身强大的拟人化及时应答能力迅速破圈,引起了各行各业的热烈讨论。简单来说ChatGPT就是可以基于用户文本输入自动生成回答的人工智能聊天机器人。那肯定会有人说这不就是Siri嘛,虽然都是交互机器人但是两者的差别可老大了。那么ChatGPT在人机交互时为什么会有这么出色的表现?它到底会不会取代搜索引擎?90%的人真的会因为ChatG
文章浏览阅读193次。8. 导航和路由管理:掌握小程序的导航方式,如使用wx.navigateTo跳转页面、使用wx.redirect重定向页面等,学会实现页面之间的跳转和传参。1. 小程序的基本概念和架构:了解小程序的定义、特点以及与传统APP的区别,掌握小程序的运行环境、组件和API等基本概念。10. 支付功能:学习小程序的支付方式,如微信支付、支付宝支付等,了解支付流程和注意事项,学会实现小程序的支付功能。9. 用户授权和登录:了解小程序的用户授权机制,如获取用户信息、调用微信API等,学会实现用户的登录和注册功能。_微信小程序开发知识点总结
文章浏览阅读4.8k次,点赞7次,收藏18次。一、准备工作1. 安装微信开发者工具,并登录微信小程序账号;2. 准备斗地主游戏的图片资源;3. 准备斗地主游戏的音效资源;二、创建小程序1. 打开微信开发者工具,点击“新建小程序”,输入小程序名称,选择小程序的项目目录,点击“创建”;2. 在小程序的项目目录中,新建文件夹“images”,将准备好的斗地主游戏的图片资源放入“images”文件夹中;3. 在小程序的项目目录中,新建文件夹“sounds”,将准备好的斗地主游戏的音效资源放入“sounds”文件夹中;三、编写代码1. 在小程_扑克牌微信小程序代码
文章浏览阅读3.9k次,点赞3次,收藏7次。一、准备工作:1. 安装微信开发者工具,创建小程序项目;2. 准备游戏角色图片;3. 准备游戏背景音乐;二、实现步骤:1. 创建游戏页面,添加游戏角色图片,添加游戏背景音乐;2. 创建游戏角色类,定义游戏角色属性,如角色名称、角色图片、角色能力等;3. 创建游戏类,定义游戏属性,如游戏人数、游戏角色、游戏规则等;4. 创建游戏控制类,定义游戏流程,如游戏开始、游戏结束、游戏角色分配等;5. 创建游戏界面,实现游戏流程,如游戏开始、游戏结束、游戏角色分配等;6. 创建游戏结果页面,显示游戏_微信小程序游戏代码
文章浏览阅读1.7k次。1. 创建小程序项目:使用微信开发者工具创建一个小程序项目,并在项目中添加一个页面,用于模拟聊天。 2. 定义数据结构:定义一个数据结构,用于存储聊天记录,包括发送者、接收者、消息内容等信息。 3. 实现聊天功能:实现聊天功能,包括发送消息、接收消息、显示消息等功能。 4. 实现界面:使用微信小程序的界面框架,实现聊天界面,包括聊天记录列表、输入框等。代码示例:// 定义数据结构var chatData = { sender: '', receiver: '', message: '' };_制作聊天对话小程序代码
文章浏览阅读2.1k次。1、创建小程序项目:使用微信开发者工具,新建一个小程序项目,输入项目名称,选择项目目录,点击“创建”按钮,即可创建小程序项目。2、添加页面:在小程序项目中,可以添加多个页面,每个页面都有自己的页面文件,比如首页、分类页、购物车页、我的页面等。3、添加组件:在小程序项目中,可以添加多个组件,比如商品列表组件、购物车组件、订单组件等,用于在页面中显示商品信息、购物车信息、订单信息等。4、添加接口:在小程序项目中,可以添加多个接口,用于获取商品信息、购物车信息、订单信息等,以便在页面中显示。5、_微信开发者工具做一个我的商城
文章浏览阅读515次。首先在配置页面index.json 添加以下代码。然后在index.jx页面配置下拉刷新。_小程序云开发上拉刷新