小程序红包开发注意事项

2019-09-30 09:03:44 阅读:2739

前期准备:1.商户平台开通小程序红包功能。操作路径:【登录微信支付商户平台——>产品中心——>小程序红包——>开通】。开通要求:新申请商户号需满足:入驻时间超过90天、连续正常交易30天。2.下载API证书。微信商户平台所有牵扯资金流出的接口基本都需要带证书操作3.使用过程中确保商户平台资金充足4.获取用户openid。小程序红包只支持向指定openid发放指定金额红包5.红包参数设置。商户平台->产品中心->小程序红包->产品设置。此处可以设置红包使用场景及发放金额额度区间。(注:红包额度默认区间为1~200,如若使用更少0~1或者200元以上额度,需要申请审核)开发流程:1.服务器拿到用户openid,随机生成红包金额,通过调用发放红包接口获取红包参数2.前端请求获取到红包参数,调用领取红包接口,此时前端会弹出领取红包页面注意事项:若用户未领取,资金将会在24小时后退回商户的微信支付账户中。目前小程序红包仅支持用户微信扫码打开小程序,进行红包领取。(场景值1011,1025,1047,1124)开发源码:1.获取小程序进入场景值varoptions=wx.getLaunchOptionsSync();varscene=options.scene;2.在想要发放红包的接口处添加场景值参数,以方便后端能根据此参数值判断是否满足发送红包条件3.条件满足的前提下开始调用发放红包(此处我是先判断此用户是否存在发放记录,如有记录则不发放,如果需求没有要求每个用户只领一次则自己根据条件更改)4.根据上述请求返回的红包的参数调用领取接口即可小程序红包发放的接口返回存在多种可能情况,在状态码为正常,业务结果为失败情况下也有可能发放成功,具体的处理方式可以参考商户平台的文档。此处我是把所有异常的情况全都归为发放失败处理了。部分源码内容: //获取红包方法 functiongetRedPacket($openid){ //订单号 $order_no=date("YmdHis").rand(1000,9999); $money=1;//发放金额可为1~200内随机数,如为其他金额需要申请 $data=[ "nonce_str"=>getNonceStr(), "mch_billno"=>$order_no, "mch_id"=>"商户号id", "wxappid"=>"公众平台id", "send_name"=>"发放名称", "re_openid"=>$openid, "total_amount"=>$money*100, "total_num"=>1, "wishing"=>"恭喜发财", "act_name"=>"新用户红包", "remark"=>"购买优惠多多", "notify_way"=>"MINI_PROGRAM_JSAPI", //"scene_id"=>"PRODUCT_1"//当金额不在1~200内时,场景值为必传值 ]; $data['sign']=makeSign($data); //此处记录发放记录 pdo_insert("tiny_wmall_redpacket",[ "min_openid"=>$openid, "money"=>$money, "status"=>0, "create_time"=>time(), "order_no"=>$order_no ]); $post_xml=array2xml($data); $xml=postXmlCurl($post_xml,'https://api.mch.weixin.qq.com/mmpaymkttransfers/sendminiprogramhb',true); $arr=xml2array($xml); $res=[ "code"=>0, "data"=>[], "msg"=>$xml ]; if($arr['return_code']=="SUCCESS"){ if($arr["result_code"]=="SUCCESS"){ //业务结果成功,此次发放成功 $package=$arr['package']; //生成前端调用参数 $sign_data=[ "appId"=>$data["wxappid"], "timeStamp"=>(string)time(), "nonceStr"=>getNonceStr(), "package"=>urlencode($package) ]; $sign_data['paySign']=makeSign($sign_data,0); $sign_data["signType"]="MD5"; $res['code']=1; $res['data']=$sign_data; //更新发放状态 //pdo_update("tiny_wmall_redpacket",["status"=>1,"packet"=>$sign_data['package'],'send_time'=>time()],["order_no"=>$order_no]); }else{ //发放失败 //pdo_update("tiny_wmall_redpacket",["status"=>-1],["order_no"=>$order_no]); } }else{ //发放失败 //pdo_update("tiny_wmall_redpacket",["status"=>-1],["order_no"=>$order_no]); } return$res; } functiongetNonceStr($length=32){ $chars="abcdefghijklmnopqrstuvwxyz0123456789"; $str=""; for($i=0;$i$v){ if($k!="sign"&&$v!=""&&!is_array($v)){ $buff.=$k."=".$v."&"; } } $buff=trim($buff,"&"); return$buff; } /** *生成签名 *签名,本函数不覆盖sign成员变量,如要设置签名需要调用SetSign方法赋值 */ functionmakeSign($data,$is_upper=1) { ksort($data); $string=toUrlParams($data); $string=$string."&key="."23oqzgcin5jfjywvlto0aapmmmoq4kfk"; $string=md5($string); if($is_upper){ $result=strtoupper($string); }else{ $result=$string; } return$result; } functionpostXmlCurl($xml,$url,$useCert=false,$second=30) { $ch=curl_init(); //设置超时 curl_setopt($ch,CURLOPT_TIMEOUT,$second); curl_setopt($ch,CURLOPT_URL,$url); if(stripos($url,"https://")!==FALSE){ curl_setopt($ch,CURLOPT_SSLVERSION,CURL_SSLVERSION_TLSv1); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE); }else{ curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验 } //设置header curl_setopt($ch,CURLOPT_HEADER,FALSE); //要求结果为字符串且输出到屏幕上 curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE); if($useCert==true){ //设置证书 //使用证书:cert与key分别属于两个.pem文件 curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLCERT,__DIR__.'/apiclient_cert.pem'); curl_setopt($ch,CURLOPT_SSLKEY,__DIR__.'/apiclient_key.pem'); } //post提交方式 curl_setopt($ch,CURLOPT_POST,TRUE); curl_setopt($ch,CURLOPT_POSTFIELDS,$xml); //运行curl $data=curl_exec($ch); //返回结果 if($data){ curl_close($ch); return$data; }else{ $error=curl_errno($ch); curl_close($ch); return$error; } }

小程序审核严卡登录规范下如何审核通过

2019-09-09 10:46:52 阅读:2843

9月1日开始,微信小程序开始严卡审核登录规范,登录方式不仅是授权登录,像手机+验证码或账号+密码等均包含在内。要求所有在这日期后上架的小程序必须符合其规范才允许上架。那么我们的小程序应该如何设计才能通过审核。参考微信官方文档《小程序内用户帐号登录规范调整和优化建议》,地址为https://developers.weixin.qq.com/community/operate/doc/000640bb8441b82900e89f48351401目前只接触过两类小程序的授权更改:一、服务范围开放的小程序个人理解为,这类小程序面向服务的是所有人,任何人都能使用这个小程序,像是最常见的商城类小程序。这类小程序,切忌不要在进入就弹窗或者跳转登录,强制用户进行登录。拿一个社区团购的小程序为例,如下图:四个菜单页面,若未登录也可正常访问,尤其我的或会员中心这个页面一定要提供未登录也可访问,若未登录,提供按钮,如上图的点击登录字样。若此页面有一些必须登录才能使用的功能,可以在未登录时进行隐藏,登录后再显示即可,像这个页面在未登录时隐藏了团长申请入口。未登录使用过程中,进行下步操作必须使用登录信息时,可以弹出或跳转登录页,但登录一定要提供,取消登录的功能,不能弹出登录用户就必须进行登录,如下图登录页面,需要讲清楚为什么要登录,已及登录会发生什么,和可以取消登录,取消登录后还可继续使用该小小程序二、服务范围特定的小程序这类小程序,仅服务于部分人,即若想使用这个小程序必须登录验证或注册之后满足条件才能使用,这种可以直接引导用户注册或登录,如下最好可以提供一个引导页,讲明为什么需要登录或注册,登录注册页最好有用户协议、隐私政策等。还有在提交审核过程中,在微信开发者工具提交审核时,需要填写版本号以及项目备注。一定要在备注中给微信审核人员提供测试账号。审核人员可以通过你提供的账号进入小程序,对小程序内的内容进行审核。若不提供,审核人员仅能看到一个登陆页,百分百过不了暂时只接触过这两种小程序,在官方文档中还有一类是仅提供注册功能小程序可以看看官方文档按要求应该也不会特别困难最后:提交审核时一定要事先补充好内容,切勿出现测试数据字样、若有商品商品价格需要是实际价格勿是一分两分、也不要出现和小程序的服务类目不符的内容,这些都会影响小程序审核

小程序上架注意事项

2019-05-06 10:39:55 阅读:2336

首先,先感谢王工的大力支持和整理。话不多少,直接上内容:1.类目不完善或者是类目选择不当不可小程序功能与类目不符,如若官方类目申请不便,并且需要上架此类目内容,这样前端和后端需要配合做显示隐藏效果,上架时隐藏掉所有类目不符内容。2.小程序功能不完善或页面显示不全2.1功能不完善:可能是因为审核不会使用,如若确定功能没问题可以多提交几次。其他建议方案:所有能点击或有跳转的按钮或页面,能做成有跳转或显示效果的就做成有效果的,不要让人感觉点击该处按钮后页面没有反应(实际上已经请求/刷新)。2.2页面显示不全:该问题多是因为页面存在bug的问题。建议:本地/真机调试是否能复现此问题,确定是否页面确实不完整。页面如果完整,排查是否是缓存的问题,另外由于小程序请求是异步操作,确认是否是因为请求返回的先后顺序引起页面渲染不完整。3.商品/内容不符合规范测试商品是不能通过审核的。小程序上架时需要上传正式的商品,即使不是正式的也不要出现如测试、勿拍、调试等字眼的商品内容。4.敏感字小程序内部不要出现如红包,分享,返利等诱导分享的关键词。首页不要显示二维码,否则可能会被归于诱导类型被拒绝。如若需要此类关键词,做成后端可动态需改,上架时需改成非诱导性词汇。5.小程序简介没有介绍小程序功能补充完整小程序介绍就可以。6.小程序名称含有特殊行业名词名称如果含有特殊行业名词必需添加所属行业类目或者更改小程序名称。

windows系统Java常用开发环境

2019-03-11 16:22:27 阅读:2489

JDK简介JDK是Java语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。安装及配置1.安装jdk,随意选择目录2.安装jre,目录和jdk目录相同即可3.创建JAVA_HOME环境变量指向该目录,系统变量path追加%JAVA_HOME%\bin4.检验是否配置成功,打开cmd窗口,输入java-version,显示版本信息则说明安装和配置成功JMeter简介ApacheJMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。它可以用于测试静态和动态资源,例如静态文件、Java小服务程序、CGI脚本、Java对象、数据库、FTP服务器,等等。JMeter可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。Apachejmeter可以用于对静态的和动态的资源(文件,Servlet,Perl脚本,java对象,数据库和查询,FTP服务器等等)的性能进行测试。它可以用于对服务器、网络或对象模拟繁重的负载来测试它们的强度或分析不同压力类型下的整体性能。你可以使用它做性能的图形分析或在大并发负载测试你的服务器/脚本/对象。安装及配置将压缩文件解压到某个目录,创建JMETER_HOME环境变量指向该目录,系统变量path追加%JMETER_HOME%\bin运行打开cmd窗口,输入jmeter启动Tomcat简介Tomcat是Apache软件基金会(ApacheSoftwareFoundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的Servlet和JSP规范总是能在Tomcat中得到体现,Tomcat5支持最新的Servlet2.4和JSP2.0规范。因为Tomcat技术先进、性能稳定,而且免费,因而深受Java爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web应用服务器。Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat时,它实际上作为一个与Apache独立的进程单独运行的。诀窍是,当配置正确时,Apache为HTML页面服务,而Tomcat实际上运行JSP页面和Servlet。另外,Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。安装及配置1.安装Tomcat前需安装JDK2.将压缩文件解压到某个目录,创建CATALINA_HOME环境变量指向该目录,系统变量path追加%CATALINA_HOME%\bin3.检验是否配置成功,进入bin目录,运行startup.bat,启动成功则说明安装和配置成功Maven简介Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。Maven除了以程序构建能力为特色之外,还提供高级项目管理工具。由于Maven的缺省构建规则有较高的可重用性,所以常常用两三行Maven构建脚本就可以构建简单的项目。由于Maven的面向项目的方法,许多ApacheJakarta项目发文时使用Maven,而且公司项目采用Maven的比例在持续增长。Maven这个单词来自于意第绪语(犹太语),意为知识的积累,最初在JakataTurbine项目中用来简化构建过程。当时有一些项目(有各自Antbuild文件),仅有细微的差别,而JAR文件都由CVS来维护。于是希望有一种标准化的方式构建项目,一个清晰的方式定义项目的组成,一个容易的方式发布项目的信息,以及一种简单的方式在多个项目中共享JARs。安装及配置将压缩文件解压到某个目录,创建MAVEN_HOME环境变量指向该目录,系统变量path追加%MAVEN_HOME%\binsettings.xml配置在Maven中提供了一个settings.xml文件来定义Maven的全局环境信息。这个文件存在于Maven安装目录的conf子目录下面,主要包括以下元素:llocalRepository表示Maven用来在本地储存信息的本地仓库的目录。默认是用户家目录下面的.m2/repository目录。linteractiveMode表示是否使用交互模式,默认是true;如果设为false,那么当Maven需要用户进行输入的时候,它会使用一个默认值。loffline表示是否离线,默认是false。这个属性表示在Maven进行项目编译和部署等操作时是否允许Maven进行联网来下载所需要的信息。lpluginGroups在pluginGroups元素下面可以定义一系列的pluginGroup元素。表示当通过plugin的前缀来解析plugin的时候到哪里寻找。pluginGroup元素指定的是plugin的groupId。默认情况下,Maven会自动把org.apache.maven.plugins和org.codehaus.mojo添加到pluginGroups下。lproxies其下面可以定义一系列的proxy子元素,表示Maven在进行联网时需要使用到的代理。当设置了多个代理的时候第一个标记active为true的代理将会被使用。lservers其下面可以定义一系列的server子元素,表示当需要连接到一个远程服务器的时候需要使用到的验证方式。lmirrors用于定义一系列的远程仓库的镜像。alimavencentralaliyunmavenhttp://maven.aliyun.com/nexus/content/groups/public/lprofiles用于指定一系列的profile。profile元素由activation、repositories、pluginRepositories和properties四个元素组成。当一个profile在settings.xml中是处于活动状态并且在pom.xml中定义了一个相同id的profile时,settings.xml中的profile会覆盖pom.xml中的profile。修改maven的默认JDK版本:settings.xml添加如下代码jdk-1.8true1.81.81.81.8MySQL简介MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,目前属于Oracle旗下产品。MySQL是最流行的关系型数据库管理系统之一,在WEB应用方面,MySQL是最好的RDBMS(RelationalDatabaseManagementSystem,关系数据库管理系统)应用软件。MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。MySQL软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。安装及配置1.将压缩文件解压到某个目录,创建MYSQL_HOME环境变量指向该目录,系统变量path追加%MYSQL_HOME%\bin2.在该目录下新建my.ini文件,修改配置basedir、datadir,文件内容:[mysqld]basedir=D:\ProgramFiles\mysql-5.7\datadir=D:\ProgramFiles\mysql-5.7\data\port=3306skip-grant-tables3.以管理员身份打开cmd窗口,进入该目录的bin文件夹,输入mysqld--install把MySQL服务器进程添加到服务选项4.输入mysqld--initialize初始化数据文件,创建一个登陆用户,用户名默认是root,密码默认为空5.输入netstartmysql启动MySQL服务6.输入mysql-uroot-p进入MySQL管理界面,使用updatemysql.usersetauthentication_string=password('123456789')whereuser='root'andHost='localhost';修改root密码7.输入flushprivileges;刷新权限8.修改my.ini文件,删除skip-grant-tables9.重启MySQL服务NavicatforMySQL软件连接报错1862解决方法:管理员权限运行命令mysqladmin-uroot-ppassword修改密码Redis简介Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sortedset--有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,Redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。Redis是一个高性能的key-value数据库。Redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。安装及配置将压缩文件解压到某个目录,创建REDIS_HOME环境变量指向该目录,系统变量path追加%REDIS_HOME%运行打开cmd窗口,输入redis-server.exeredis.windows.conf启动服务端;打开另一个cmd窗口,输入redis-cli.exe-h127.0.0.1-p6379启动客户端Eclipse简介Eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。安装及配置1.安装Eclipse前需安装JDK2.将压缩文件解压到某个目录,运行eclipse.exe启动程序即可集成Tomcat打开Eclipse,单击“Window”菜单,选择“Preferences”,找到“Server”—“RuntimeEnvironments”,点击“Add”添加对应版本的Tomcat点击“Next”,选择Tomcat的安装目录点击“Finish”集成Maven打开Eclipse,单击“Window”菜单,选择“Preferences”,找到“Maven”—“Installations”,点击“Add”选择Maven的安装目录点击“Finish”;找到“Maven”—“UserSettings”,修改setting.xml为刚才配置的Maven目录下的setting.xml集成SVN使用Eclipse在线安装subclipse插件,打开Eclipse,单击“Help”菜单,选择“InstallNewSoftware”,点击“Add”,填入地址“https://dl.bintray.com/subclipse/releases/subclipse/latest/”,点击“OK”,加载出列表后选择“SelectAll”,点击“Next”直到看到“Finish”,安装完成后需要重启Eclipse

上报错误