HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

加油优惠APP定制开发

小程序

1.一键加油功能;可以看到油加油的供应商;
2.在线商城功能;线上可以直接进行商品买卖;
3.油卡充值功能;有其他供应商可以直接进行油卡充值的功能;针对这个APP或者针对这个商家,充值消费后可以有优惠;
4.折扣优功能;直接输入加油金额进行折扣优惠,仅限在该APP内使用;

继续阅读 »

1.一键加油功能;可以看到油加油的供应商;
2.在线商城功能;线上可以直接进行商品买卖;
3.油卡充值功能;有其他供应商可以直接进行油卡充值的功能;针对这个APP或者针对这个商家,充值消费后可以有优惠;
4.折扣优功能;直接输入加油金额进行折扣优惠,仅限在该APP内使用;

收起阅读 »

开发过程中出现Maximum call stack size exceeded

App

出现错误:在进行app真机调试时,出现"RangeError: Maximum call stack size exceeded"
排除问题:只是调用了几个接口,没有递归调用,也没有低级错误,在电脑浏览器上可以正常使用
解决:重启一次hbuilderx,提示更新,手机上的hbuilderx调试基座同样进行更新。再次app真机调试成功

继续阅读 »

出现错误:在进行app真机调试时,出现"RangeError: Maximum call stack size exceeded"
排除问题:只是调用了几个接口,没有递归调用,也没有低级错误,在电脑浏览器上可以正常使用
解决:重启一次hbuilderx,提示更新,手机上的hbuilderx调试基座同样进行更新。再次app真机调试成功

收起阅读 »

线上盲盒的盈利模式

默认话题

相对比线下盲盒机和连锁店,线上盲盒商城怎样赚钱
一:盲盒因为盲,所以开盲盒的用户会比较感兴趣并多次充值抽取,这里商家就已经产出收益了
二:如果用户开出的盲盒不是很喜欢,或是重复很多了,可以回购给平台商家,只需要支付一定比例的手续费就可以了,这里商家是属于躺赚的。
三:除开盲盒商品外,还可以设置抽奖,集卡等模式,利用用户拉用户的裂变模式,大范围的开展产品销售,这里商家除开赚取商品利润还可以赚取差价

继续阅读 »

相对比线下盲盒机和连锁店,线上盲盒商城怎样赚钱
一:盲盒因为盲,所以开盲盒的用户会比较感兴趣并多次充值抽取,这里商家就已经产出收益了
二:如果用户开出的盲盒不是很喜欢,或是重复很多了,可以回购给平台商家,只需要支付一定比例的手续费就可以了,这里商家是属于躺赚的。
三:除开盲盒商品外,还可以设置抽奖,集卡等模式,利用用户拉用户的裂变模式,大范围的开展产品销售,这里商家除开赚取商品利润还可以赚取差价

收起阅读 »

个人使用phpstudy搭建PHP本地服务器流程记录

PHP搭建服务器

1.phpstudy创建PHP项目

启动Apache和MySQL


点击左侧网站,创建网页。注意到程序类型就是PHP,这里是创建PHP项目。

<!-- 域名可以任意填写 -->  
www.test02.com  
//端口号最好改8082以免撞了  
<!-- 根目录是自动创建的,也可以自己选择 -->

点击创建数据库,如果现在不选,可以到数据库去新建。


点击高级配置,网站首页设置成index.php。然后就可以点击确认了。

网站首页: index.php index.html error/index.html  
<!-- 改为 -->  
index.php index.html error/index.php  
<!-- 设置完成后可以点击phpstudy的页面管理打开页面。 -->  
<!-- 也可以复制路径,本地接口+路径在浏览器打开 -->  
http://localhost/error/index.php  
http://localhost/ + error/index.php//不知道可以从phpstudy网站首页设置复制

2.配置php文件

打开index.php,设置跨域配置,完成后前端才能访问。
跨域配置

header('Content-type:text/html;charset=utf-8');// 配置json  
header("Access-Control-Allow-Origin:true");// 跨域配置允许访问,Access-Control-Allow-Origin:  
// header("Access-Control-Allow-Origin: *");使用通配符允许所有站点访问私有API是显而易见的坏主意。  
header("Access-Control-Allow-Origin: http://localhost:8080");// 指定域名,写入域名头,只让本地8080端口访问,为了安全

测试运行和访问

<?php  
header('Content-type:text/html;charset=utf-8');  
header("Access-Control-Allow-Origin:true");  
header("Access-Control-Allow-Origin: http://localhost:8080");  
//测试用的数组  
$res = array(  
  "name" => "tom",  
  "age" => "18"  
);  
echo json_encode($res);//返回给前端的  
<!-- 如果未设置跨域访问会返回报错: -->  
已拦截跨源请求:同源策略禁止读取位于 http://localhost/error/index.php 的远程资源。(原因:CORS 头 'Access-Control-Allow-Origin' 不匹配 'true')。


链接指定数据库进行操控

<?php  
header('Content-type:text/html;charset=utf-8');  
header("Access-Control-Allow-Origin:true");  
header("Access-Control-Allow-Origin: http://localhost:8080");  

$link=@mysqli_connect('localhost','root','密码','test01',3306)or die('数据库连接失败');  
mysqli_set_charset($link,'utf8');  
// 接口测试  
$sql = "select * from students";//SQL语句赋值给变量sql  
$select = mysqli_query( $link, $sql );//执行SQL语句函数复制给变量select  
$data = array();//用于返回前端的数组,也以防报错  
 while($getsel = mysqli_fetch_assoc($select)){  
    $data[] = $getsel;  
 }  
 //mysqli_fetch_assoc函数获取数据  
echo json_encode($data);//返回给前端  
// 操作结束关闭数据库   
mysqli_close($link);

继续阅读 »

PHP搭建服务器

1.phpstudy创建PHP项目

启动Apache和MySQL


点击左侧网站,创建网页。注意到程序类型就是PHP,这里是创建PHP项目。

<!-- 域名可以任意填写 -->  
www.test02.com  
//端口号最好改8082以免撞了  
<!-- 根目录是自动创建的,也可以自己选择 -->

点击创建数据库,如果现在不选,可以到数据库去新建。


点击高级配置,网站首页设置成index.php。然后就可以点击确认了。

网站首页: index.php index.html error/index.html  
<!-- 改为 -->  
index.php index.html error/index.php  
<!-- 设置完成后可以点击phpstudy的页面管理打开页面。 -->  
<!-- 也可以复制路径,本地接口+路径在浏览器打开 -->  
http://localhost/error/index.php  
http://localhost/ + error/index.php//不知道可以从phpstudy网站首页设置复制

2.配置php文件

打开index.php,设置跨域配置,完成后前端才能访问。
跨域配置

header('Content-type:text/html;charset=utf-8');// 配置json  
header("Access-Control-Allow-Origin:true");// 跨域配置允许访问,Access-Control-Allow-Origin:  
// header("Access-Control-Allow-Origin: *");使用通配符允许所有站点访问私有API是显而易见的坏主意。  
header("Access-Control-Allow-Origin: http://localhost:8080");// 指定域名,写入域名头,只让本地8080端口访问,为了安全

测试运行和访问

<?php  
header('Content-type:text/html;charset=utf-8');  
header("Access-Control-Allow-Origin:true");  
header("Access-Control-Allow-Origin: http://localhost:8080");  
//测试用的数组  
$res = array(  
  "name" => "tom",  
  "age" => "18"  
);  
echo json_encode($res);//返回给前端的  
<!-- 如果未设置跨域访问会返回报错: -->  
已拦截跨源请求:同源策略禁止读取位于 http://localhost/error/index.php 的远程资源。(原因:CORS 头 'Access-Control-Allow-Origin' 不匹配 'true')。


链接指定数据库进行操控

<?php  
header('Content-type:text/html;charset=utf-8');  
header("Access-Control-Allow-Origin:true");  
header("Access-Control-Allow-Origin: http://localhost:8080");  

$link=@mysqli_connect('localhost','root','密码','test01',3306)or die('数据库连接失败');  
mysqli_set_charset($link,'utf8');  
// 接口测试  
$sql = "select * from students";//SQL语句赋值给变量sql  
$select = mysqli_query( $link, $sql );//执行SQL语句函数复制给变量select  
$data = array();//用于返回前端的数组,也以防报错  
 while($getsel = mysqli_fetch_assoc($select)){  
    $data[] = $getsel;  
 }  
 //mysqli_fetch_assoc函数获取数据  
echo json_encode($data);//返回给前端  
// 操作结束关闭数据库   
mysqli_close($link);

收起阅读 »

自营商城APP定制开发

小程序

自营电商是一种电子商务模式,其特征是以标准化的要求,对其经营产品进行统一生产或采购、产品展示、在线交易,并通过物流配送将产品投放到最终消费群体的行为。国内电子商务发展到今天,这种基于互联网的网上交易活动因其自身特点和商业需要衍生出了很多模式,自营电商(自营式电商)经过一定的发展成功塑造了商城的强有力的品质和售货保障形象,,加强了电商对商品来源、商品质量、商品供应及物流配送的管控能力,实现了商品的垂直化供应,使终端消费方获得更加优质的产品和服务。

继续阅读 »

自营电商是一种电子商务模式,其特征是以标准化的要求,对其经营产品进行统一生产或采购、产品展示、在线交易,并通过物流配送将产品投放到最终消费群体的行为。国内电子商务发展到今天,这种基于互联网的网上交易活动因其自身特点和商业需要衍生出了很多模式,自营电商(自营式电商)经过一定的发展成功塑造了商城的强有力的品质和售货保障形象,,加强了电商对商品来源、商品质量、商品供应及物流配送的管控能力,实现了商品的垂直化供应,使终端消费方获得更加优质的产品和服务。

收起阅读 »

淘客APP开发功能点

5+App开发

淘客APP开发功能点
1.多平台对接
APP需要对接主流电商平台,淘宝、天猫、京东、拼多多、唯品会等数据接口,平台切换简单方便。
2.多用户商城
APP平台化,做成多商户,淘客+商城新模式运营,多,更容易引流。
3.社区团购
依托真实社区,以小区为单位以为载体的一种区域化、小众化、本地化、网络化的团购,依托社区和团长社交关系实现生鲜商品流通、生活服务,集中化管理运营的新零售模式。
4.+合伙人模式
三级(法律允许的多层级)+运营商模式+VIP会员制,多逻辑自由组合,横向纵向双向拓展,轻松实现代理级别新模式运营。
5.营销多样化
通过生成,通过邀请好友,一件分享朋友圈、、知乎、头条、小红书等社交媒体,支持电商直播,支持618、双十一等重大活动宣传海报生成,为运营提前筹备。
6.商品一键
商品实时从第三方平台自动无需手动操作,数据更新快,操作简单,产品上架容易。
7.快速分享挣红包
通过分享挣红包等方式,鼓励消费者分享商品至各社交平台,激活消费者,降低成本,提升推广速度和裂变效果。
8.多维数据分析
产品数据,财务数据,用户数据,平台盈利等多维度数据查询分析让您的决策更加有效。

继续阅读 »

淘客APP开发功能点
1.多平台对接
APP需要对接主流电商平台,淘宝、天猫、京东、拼多多、唯品会等数据接口,平台切换简单方便。
2.多用户商城
APP平台化,做成多商户,淘客+商城新模式运营,多,更容易引流。
3.社区团购
依托真实社区,以小区为单位以为载体的一种区域化、小众化、本地化、网络化的团购,依托社区和团长社交关系实现生鲜商品流通、生活服务,集中化管理运营的新零售模式。
4.+合伙人模式
三级(法律允许的多层级)+运营商模式+VIP会员制,多逻辑自由组合,横向纵向双向拓展,轻松实现代理级别新模式运营。
5.营销多样化
通过生成,通过邀请好友,一件分享朋友圈、、知乎、头条、小红书等社交媒体,支持电商直播,支持618、双十一等重大活动宣传海报生成,为运营提前筹备。
6.商品一键
商品实时从第三方平台自动无需手动操作,数据更新快,操作简单,产品上架容易。
7.快速分享挣红包
通过分享挣红包等方式,鼓励消费者分享商品至各社交平台,激活消费者,降低成本,提升推广速度和裂变效果。
8.多维数据分析
产品数据,财务数据,用户数据,平台盈利等多维度数据查询分析让您的决策更加有效。

收起阅读 »

免费API 订单播报 云音箱 自定义播报内容不止于支付 4G云喇叭

部分API接口预览,完整文档看语雀
https://www.yuque.com/docs/share/a2617233-7d39-4bda-8b77-f398420bd5bc?# 《收款云音箱云喇叭API开发接口文档(2021-05-11)》

1)接口地址:
https://speaker.17laimai.cn
2)协议和端口号:
HTTP 80,HTTPS 443
3)请求方式:GET 或 POST
4)提交数据格式:
id=SPEAKERID&uid=USERID&price=PRICEVALUE&token=TOKEN&version=1
5)返回数据格式:JSON

!

继续阅读 »

部分API接口预览,完整文档看语雀
https://www.yuque.com/docs/share/a2617233-7d39-4bda-8b77-f398420bd5bc?# 《收款云音箱云喇叭API开发接口文档(2021-05-11)》

1)接口地址:
https://speaker.17laimai.cn
2)协议和端口号:
HTTP 80,HTTPS 443
3)请求方式:GET 或 POST
4)提交数据格式:
id=SPEAKERID&uid=USERID&price=PRICEVALUE&token=TOKEN&version=1
5)返回数据格式:JSON

!

收起阅读 »

分享一个安卓APP调微信支付的坑

微信支付 App打包

记一个uni.requestPayment 的坑,正常我们使用小程序是直接在回调里调用,但是APP支付一直调用失败
排查了很多原因一直是报这个错
{"errMsg":"requestPayment:fail service not found"}

后面参考unipay的项目,套多了一层Promise,竟然就可以了
今天搞了一天,希望能帮到大家,少走弯路
最后附上项目代码

// #ifdef MP-WEIXIN  
                NET.request(API.gotoPay, submitResult, 'POST').then(res => {  
                    uni.requestPayment({  
                        privider: 'wxpay',  
                        timeStamp: res.data.timeStamp,  
                        nonceStr: res.data.nonceStr,  
                        package: res.data.package,  
                        signType: res.data.signType,  
                        paySign: res.data.paySign,  
                        success: function(payRes) {  
                            uni.showToast({  
                                title: '支付成功'  
                            })  
                            _this.type = 0  
                            _this.page = 1  
                            _this.list = []  
                            _this.getListData()  
                        },  
                        fail: function(err) {  
                            uni.showToast({  
                                icon: 'none',  
                                title: '支付失败'  
                            })  
                        }  
                    })  
                }).catch(err => {  
                    uni.hideLoading()  
                    uni.showToast({  
                        title: '支付失败',  
                        icon: 'none'  
                    })  
                })  
                // #endif  
                // #ifdef APP-PLUS  
                new Promise((resolve, reject) => {  
                    return NET.request(API.gotoAppPay, submitResult, 'POST').then(res => {  
                        const orderInfo = {  
                            "appid": res.data.appId, // 微信开放平台 - 应用 - AppId,注意和微信小程序、公众号 AppId 可能不一致  
                            "noncestr": res.data.nonceStr, // 随机字符串  
                            "package": res.data.package, // 固定值  
                            "partnerid": res.data.partnerId, // 微信支付商户号  
                            "prepayid": res.data.prepayId, // 统一下单订单号   
                            "timestamp": res.data.timeStamp, // 时间戳(单位:秒)  
                            "sign": res.data.sign // 签名,这里用的 MD5 签名  
                        }  
                        return new Promise((resolve, reject) => {  
                            uni.requestPayment({  
                                provider: 'wxpay',  
                                orderInfo: orderInfo,  
                                success: function(payRes) {  
                                    resolve()  
                                },  
                                fail: function(err) {  
                                    reject()  
                                },  
                                complete: function() {  
                                    uni.hideLoading()  
                                }  
                            })  
                        }).then(() => {  
                            uni.showToast({  
                                title: '支付成功'  
                            })  
                        }).catch((err) => {  
                            uni.showModal({  
                                content: err.message || '支付失败',  
                            })  
                        })  
                    })  
                })  
                // #endif
继续阅读 »

记一个uni.requestPayment 的坑,正常我们使用小程序是直接在回调里调用,但是APP支付一直调用失败
排查了很多原因一直是报这个错
{"errMsg":"requestPayment:fail service not found"}

后面参考unipay的项目,套多了一层Promise,竟然就可以了
今天搞了一天,希望能帮到大家,少走弯路
最后附上项目代码

// #ifdef MP-WEIXIN  
                NET.request(API.gotoPay, submitResult, 'POST').then(res => {  
                    uni.requestPayment({  
                        privider: 'wxpay',  
                        timeStamp: res.data.timeStamp,  
                        nonceStr: res.data.nonceStr,  
                        package: res.data.package,  
                        signType: res.data.signType,  
                        paySign: res.data.paySign,  
                        success: function(payRes) {  
                            uni.showToast({  
                                title: '支付成功'  
                            })  
                            _this.type = 0  
                            _this.page = 1  
                            _this.list = []  
                            _this.getListData()  
                        },  
                        fail: function(err) {  
                            uni.showToast({  
                                icon: 'none',  
                                title: '支付失败'  
                            })  
                        }  
                    })  
                }).catch(err => {  
                    uni.hideLoading()  
                    uni.showToast({  
                        title: '支付失败',  
                        icon: 'none'  
                    })  
                })  
                // #endif  
                // #ifdef APP-PLUS  
                new Promise((resolve, reject) => {  
                    return NET.request(API.gotoAppPay, submitResult, 'POST').then(res => {  
                        const orderInfo = {  
                            "appid": res.data.appId, // 微信开放平台 - 应用 - AppId,注意和微信小程序、公众号 AppId 可能不一致  
                            "noncestr": res.data.nonceStr, // 随机字符串  
                            "package": res.data.package, // 固定值  
                            "partnerid": res.data.partnerId, // 微信支付商户号  
                            "prepayid": res.data.prepayId, // 统一下单订单号   
                            "timestamp": res.data.timeStamp, // 时间戳(单位:秒)  
                            "sign": res.data.sign // 签名,这里用的 MD5 签名  
                        }  
                        return new Promise((resolve, reject) => {  
                            uni.requestPayment({  
                                provider: 'wxpay',  
                                orderInfo: orderInfo,  
                                success: function(payRes) {  
                                    resolve()  
                                },  
                                fail: function(err) {  
                                    reject()  
                                },  
                                complete: function() {  
                                    uni.hideLoading()  
                                }  
                            })  
                        }).then(() => {  
                            uni.showToast({  
                                title: '支付成功'  
                            })  
                        }).catch((err) => {  
                            uni.showModal({  
                                content: err.message || '支付失败',  
                            })  
                        })  
                    })  
                })  
                // #endif
收起阅读 »

'PDRCore.h' file not found

常见问题

我将最新的IOS SDK下载解压之后,然后将HBuilder-Hello项目拷贝到其他目录,然后通过xcode打开运行的时候就会报:'PDRCore.h' file not found。

我将最新的IOS SDK下载解压之后,然后将HBuilder-Hello项目拷贝到其他目录,然后通过xcode打开运行的时候就会报:'PDRCore.h' file not found。

社区团购生鲜商城软件开发

微信小程序

社区团购是目前生鲜电商优的商业模式。
简单讲,社区团购的整个交易链条有三个角色,平台、团长和消费者。
平台提供的商品多为生鲜类,消费者挑选自己需要的商品在线下单。一般当日下单,隔日提供商品,
而商品后一公里的服务由在客户附近的「团长」完成。团长多为小区周围的便利店店主或者小区里的宝妈等。
团长解决了后一公里的配送和仓储,又因为偏「个人」的属性大大降低了交易的信任成本,同时优秀的团长还部分解决了平台 c 端用户获取和复购的问题。
国内社区团购的生意并非今天才开始兴起。
2018 年,国内批社区团购的创业公司开始在不同的省份跑圈地,而资本也差不多是在那个时间里开始下注。当时头部平台的标准都是月交易额过亿,这场在初创公司之间的小战役,只打了一年的时间。
后,以十荟团收购你我您而阶段性结束。
进入 2020 年,一场突如其来的疫情打乱了所有人的准备。疫情期间的特殊场景,让电商生态进一步渗透。
而相较于已经成熟的传统电商品类,很多用户是真的在 2020 年次尝试在线买菜。一次被动的,但较大规模用户习惯的刺激,使得社区团购这一目前生鲜电商优的商业模式再次得到了快速发展。

继续阅读 »

社区团购是目前生鲜电商优的商业模式。
简单讲,社区团购的整个交易链条有三个角色,平台、团长和消费者。
平台提供的商品多为生鲜类,消费者挑选自己需要的商品在线下单。一般当日下单,隔日提供商品,
而商品后一公里的服务由在客户附近的「团长」完成。团长多为小区周围的便利店店主或者小区里的宝妈等。
团长解决了后一公里的配送和仓储,又因为偏「个人」的属性大大降低了交易的信任成本,同时优秀的团长还部分解决了平台 c 端用户获取和复购的问题。
国内社区团购的生意并非今天才开始兴起。
2018 年,国内批社区团购的创业公司开始在不同的省份跑圈地,而资本也差不多是在那个时间里开始下注。当时头部平台的标准都是月交易额过亿,这场在初创公司之间的小战役,只打了一年的时间。
后,以十荟团收购你我您而阶段性结束。
进入 2020 年,一场突如其来的疫情打乱了所有人的准备。疫情期间的特殊场景,让电商生态进一步渗透。
而相较于已经成熟的传统电商品类,很多用户是真的在 2020 年次尝试在线买菜。一次被动的,但较大规模用户习惯的刺激,使得社区团购这一目前生鲜电商优的商业模式再次得到了快速发展。

收起阅读 »

uni-app 启动页方案

启动页

在pages.json 里面 配置条件编译 首页
在启动页面 判断是否登录 (这种方式不影响h5打包 而且app 不会一闪 启动页可以随意编辑)

在pages.json 里面 配置条件编译 首页
在启动页面 判断是否登录 (这种方式不影响h5打包 而且app 不会一闪 启动页可以随意编辑)

uni.request 没有返回全部 response Headers

RequestHeader

出现这个情况是在跨域请求中才会有的。
只需要在后端响应头中添加一个属性 Access-Control-Expose-Headers: [属性名] 即可获取到你要想的属性
我这里使用的 php 想要获取到自定义 token,如下

前端正常获取

值得一提,这个其实在 uniapp 文档中有提过一句,只是当时没仔细看,导致自己摸索大半天。还要不是跨域的情况下不需要这样配置。

继续阅读 »

出现这个情况是在跨域请求中才会有的。
只需要在后端响应头中添加一个属性 Access-Control-Expose-Headers: [属性名] 即可获取到你要想的属性
我这里使用的 php 想要获取到自定义 token,如下

前端正常获取

值得一提,这个其实在 uniapp 文档中有提过一句,只是当时没仔细看,导致自己摸索大半天。还要不是跨域的情况下不需要这样配置。

收起阅读 »