HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

小程序研发需要多少钱?贵不贵呢

微信小程序

  随着小程序红利的渐渐显现,越来越多的商家、企业开始研发属于自己的小程序。当然他们会首先询问微信小程序开发公司关于:小程序研发需要多少钱?这是每一个企业在研发小程序之前都会问到的问题,今天咱们就从小程序的研发周期、成本等问题来分析研发一个小程序到底需要多少钱,这样企业投资者就知道自己投资开发小程序划不划算了。

  其实小程序研发到底需要多少钱,这个不好说。因为小程序的研发费用要取决于你想要实现的小程序的功能,总的来说就是功能越多越复杂研发费用也就越多!

  小程序研发费用

  1、第三方平台研发

  如果是寻求第三方平台研发定制,首先从制作周期上来说要比较节省时间,直接交给第三方开发公司,把你需要实现功能告诉他们然后约定个时间到时直接验收就可以了。

  从费用上来看,主要看你开发的小程序是什么类型的。若是企业型的费用会便宜点一般会在3000左右;若是电商类或者功能比较全面型的小程序费用基本都在20000元左右。

  2、自主研发

  如果选择自主研发,从周期、费用上来说需要花费较长的时间与费用。因为自主研发首先就需要组建一个研发团队,

  从目前市场来看小程序的研发费用与功能是成正比关系,功能越全费用也就越高,反之费用也就越低!
本文由专业的微信小程序开发公司燚轩科技整理发布,如需转载请注明出处!

继续阅读 »

  随着小程序红利的渐渐显现,越来越多的商家、企业开始研发属于自己的小程序。当然他们会首先询问微信小程序开发公司关于:小程序研发需要多少钱?这是每一个企业在研发小程序之前都会问到的问题,今天咱们就从小程序的研发周期、成本等问题来分析研发一个小程序到底需要多少钱,这样企业投资者就知道自己投资开发小程序划不划算了。

  其实小程序研发到底需要多少钱,这个不好说。因为小程序的研发费用要取决于你想要实现的小程序的功能,总的来说就是功能越多越复杂研发费用也就越多!

  小程序研发费用

  1、第三方平台研发

  如果是寻求第三方平台研发定制,首先从制作周期上来说要比较节省时间,直接交给第三方开发公司,把你需要实现功能告诉他们然后约定个时间到时直接验收就可以了。

  从费用上来看,主要看你开发的小程序是什么类型的。若是企业型的费用会便宜点一般会在3000左右;若是电商类或者功能比较全面型的小程序费用基本都在20000元左右。

  2、自主研发

  如果选择自主研发,从周期、费用上来说需要花费较长的时间与费用。因为自主研发首先就需要组建一个研发团队,

  从目前市场来看小程序的研发费用与功能是成正比关系,功能越全费用也就越高,反之费用也就越低!
本文由专业的微信小程序开发公司燚轩科技整理发布,如需转载请注明出处!

收起阅读 »

打包问题:manifest.plus.distribute.splashscreen.ios.iphone.default;

云端打包发布常见问题

几分钟前打包正常,麻烦看一下。。
manifest.plus.distribute.splashscreen.ios.iphone.default;
BuildConfigure Failed 31007 无法导入p12证书plus->distribute->apple->p12

BuildConfigure Failed 31007 无法导入p12证书plus->distribute->apple->p12

继续阅读 »

几分钟前打包正常,麻烦看一下。。
manifest.plus.distribute.splashscreen.ios.iphone.default;
BuildConfigure Failed 31007 无法导入p12证书plus->distribute->apple->p12

BuildConfigure Failed 31007 无法导入p12证书plus->distribute->apple->p12

收起阅读 »

微信支付 -100 错误 -1错误解决分析与办法

支付 微信支付

我下载的是官方的支付demo V3版本php服务端..

今天在写H5+的时候 遇到一个-100的问题.
核对了包名
app签名
appid 等数据都无误
一直报-100错误.

最后发现官方服务端demo中

WxPay.Api.php 文件63行 var_dump($response);exit;
造成的输出格式与app需求不符,所以产生的报错.

这个句估计是官方大神们测试的语句. 忘记注释了.

所以大家把这句删掉或者注释掉就正常了.

提醒大家,切记 包名 APP签名 等信息 一定要跟再微信开发平台上设置的一致才行.

继续阅读 »

我下载的是官方的支付demo V3版本php服务端..

今天在写H5+的时候 遇到一个-100的问题.
核对了包名
app签名
appid 等数据都无误
一直报-100错误.

最后发现官方服务端demo中

WxPay.Api.php 文件63行 var_dump($response);exit;
造成的输出格式与app需求不符,所以产生的报错.

这个句估计是官方大神们测试的语句. 忘记注释了.

所以大家把这句删掉或者注释掉就正常了.

提醒大家,切记 包名 APP签名 等信息 一定要跟再微信开发平台上设置的一致才行.

收起阅读 »

php编程之小程序支付所需规避的问题

  对于开发一款小程序来说,经常是需要做支付功能的,但是大家在做这个功能的时候,往往会发现遇到很多自己无法解决的问题,那么对于这个问题,下面就跟大家详细来分析解答一下吧。

  重点代码部分:
/*

  • A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
  • Digest Algorithm, as defined in RFC 1321.
  • Version 1.1 Copyright (C) Paul Johnston 1999 - 2002.
  • Code also contributed by Greg Holt
  • See http://pajhome.org.uk/site/legal.html for details.
    */

/*

  • Add integers, wrapping at 2^32. This uses 16-bit operations internally
  • to work around bugs in some JS interpreters.
    */
    function safe_add(x, y) {
    var lsw = (x & 0xFFFF) + (y & 0xFFFF)
    var msw = (x >> 16) + (y >> 16) + (lsw >> 16)
    return (msw << 16) | (lsw & 0xFFFF)
    }

/*

  • Bitwise rotate a 32-bit number to the left.
    */
    function rol(num, cnt) {
    return (num << cnt) | (num >>> (32 - cnt))
    }

/*

  • These functions implement the four basic operations the algorithm uses.
    */
    function cmn(q, a, b, x, s, t) {
    return safe_add(rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
    }
    function ff(a, b, c, d, x, s, t) {
    return cmn((b & c) | ((~b) & d), a, b, x, s, t)
    }
    function gg(a, b, c, d, x, s, t) {
    return cmn((b & d) | (c & (~d)), a, b, x, s, t)
    }
    function hh(a, b, c, d, x, s, t) {
    return cmn(b ^ c ^ d, a, b, x, s, t)
    }
    function ii(a, b, c, d, x, s, t) {
    return cmn(c ^ (b | (~d)), a, b, x, s, t)
    }

/*

  • Calculate the MD5 of an array of little-endian words, producing an array
  • of little-endian words.
    */
    function coreMD5(x) {
    var a = 1732584193
    var b = -271733879
    var c = -1732584194
    var d = 271733878

for (var i = 0; i < x.length; i += 16) {
var olda = a
var oldb = b
var oldc = c
var oldd = d

a = ff(a, b, c, d, x[i + 0], 7, -680876936)
d = ff(d, a, b, c, x[i + 1], 12, -389564586)
c = ff(c, d, a, b, x[i + 2], 17, 606105819)
b = ff(b, c, d, a, x[i + 3], 22, -1044525330)
a = ff(a, b, c, d, x[i + 4], 7, -176418897)
d = ff(d, a, b, c, x[i + 5], 12, 1200080426)
c = ff(c, d, a, b, x[i + 6], 17, -1473231341)
b = ff(b, c, d, a, x[i + 7], 22, -45705983)
a = ff(a, b, c, d, x[i + 8], 7, 1770035416)
d = ff(d, a, b, c, x[i + 9], 12, -1958414417)
c = ff(c, d, a, b, x[i + 10], 17, -42063)
b = ff(b, c, d, a, x[i + 11], 22, -1990404162)
a = ff(a, b, c, d, x[i + 12], 7, 1804603682)
d = ff(d, a, b, c, x[i + 13], 12, -40341101)
c = ff(c, d, a, b, x[i + 14], 17, -1502002290)
b = ff(b, c, d, a, x[i + 15], 22, 1236535329)

a = gg(a, b, c, d, x[i + 1], 5, -165796510)
d = gg(d, a, b, c, x[i + 6], 9, -1069501632)
c = gg(c, d, a, b, x[i + 11], 14, 643717713)
b = gg(b, c, d, a, x[i + 0], 20, -373897302)
a = gg(a, b, c, d, x[i + 5], 5, -701558691)
d = gg(d, a, b, c, x[i + 10], 9, 38016083)
c = gg(c, d, a, b, x[i + 15], 14, -660478335)
b = gg(b, c, d, a, x[i + 4], 20, -405537848)
a = gg(a, b, c, d, x[i + 9], 5, 568446438)
d = gg(d, a, b, c, x[i + 14], 9, -1019803690)
c = gg(c, d, a, b, x[i + 3], 14, -187363961)
b = gg(b, c, d, a, x[i + 8], 20, 1163531501)
a = gg(a, b, c, d, x[i + 13], 5, -1444681467)
d = gg(d, a, b, c, x[i + 2], 9, -51403784)
c = gg(c, d, a, b, x[i + 7], 14, 1735328473)
b = gg(b, c, d, a, x[i + 12], 20, -1926607734)

a = hh(a, b, c, d, x[i + 5], 4, -378558)
d = hh(d, a, b, c, x[i + 8], 11, -2022574463)
c = hh(c, d, a, b, x[i + 11], 16, 1839030562)
b = hh(b, c, d, a, x[i + 14], 23, -35309556)
a = hh(a, b, c, d, x[i + 1], 4, -1530992060)
d = hh(d, a, b, c, x[i + 4], 11, 1272893353)
c = hh(c, d, a, b, x[i + 7], 16, -155497632)
b = hh(b, c, d, a, x[i + 10], 23, -1094730640)
a = hh(a, b, c, d, x[i + 13], 4, 681279174)
d = hh(d, a, b, c, x[i + 0], 11, -358537222)
c = hh(c, d, a, b, x[i + 3], 16, -722521979)
b = hh(b, c, d, a, x[i + 6], 23, 76029189)
a = hh(a, b, c, d, x[i + 9], 4, -640364487)
d = hh(d, a, b, c, x[i + 12], 11, -421815835)
c = hh(c, d, a, b, x[i + 15], 16, 530742520)
b = hh(b, c, d, a, x[i + 2], 23, -995338651)

a = ii(a, b, c, d, x[i + 0], 6, -198630844)
d = ii(d, a, b, c, x[i + 7], 10, 1126891415)
c = ii(c, d, a, b, x[i + 14], 15, -1416354905)
b = ii(b, c, d, a, x[i + 5], 21, -57434055)
a = ii(a, b, c, d, x[i + 12], 6, 1700485571)
d = ii(d, a, b, c, x[i + 3], 10, -1894986606)
c = ii(c, d, a, b, x[i + 10], 15, -1051523)
b = ii(b, c, d, a, x[i + 1], 21, -2054922799)
a = ii(a, b, c, d, x[i + 8], 6, 1873313359)
d = ii(d, a, b, c, x[i + 15], 10, -30611744)
c = ii(c, d, a, b, x[i + 6], 15, -1560198380)
b = ii(b, c, d, a, x[i + 13], 21, 1309151649)
a = ii(a, b, c, d, x[i + 4], 6, -145523070)
d = ii(d, a, b, c, x[i + 11], 10, -1120210379)
c = ii(c, d, a, b, x[i + 2], 15, 718787259)
b = ii(b, c, d, a, x[i + 9], 21, -343485551)

a = safe_add(a, olda)
b = safe_add(b, oldb)
c = safe_add(c, oldc)
d = safe_add(d, oldd)
}
return [a, b, c, d]
}

/*

  • Convert an array of little-endian words to a hex string.
    /
    function binl2hex(binarray) {
    var hex_tab = "0123456789abcdef"
    var str = ""
    for (var i = 0; i < binarray.length
    4; i++) {
    str += hex_tab.charAt((binarray[i >> 2] >> ((i % 4) 8 + 4)) & 0xF) +
    hex_tab.charAt((binarray[i >> 2] >> ((i % 4)
    8)) & 0xF)
    }
    return str
    }

/*

  • Convert an array of little-endian words to a base64 encoded string.
    /
    function binl2b64(binarray) {
    var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
    var str = ""
    for (var i = 0; i < binarray.length
    32; i += 6) {
    str += tab.charAt(((binarray[i >> 5] << (i % 32)) & 0x3F) |
    ((binarray[i >> 5 + 1] >> (32 - i % 32)) & 0x3F))
    }
    return str
    }

/*

  • Convert an 8-bit character string to a sequence of 16-word blocks, stored
  • as an array, and append appropriate padding for MD4/5 calculation.
  • If any of the characters are >255, the high byte is silently ignored.
    /
    function str2binl(str) {
    var nblk = ((str.length + 8) >> 6) + 1 // number of 16-word blocks
    var blks = new Array(nblk
    16)
    for (var i = 0; i < nblk 16; i++) blks[i] = 0
    for (var i = 0; i < str.length; i++)
    blks[i >> 2] |= (str.charCodeAt(i) & 0xFF) << ((i % 4)
    8)
    blks[i >> 2] |= 0x80 << ((i % 4) 8)
    blks[nblk
    16 - 2] = str.length * 8
    return blks
    }

/*

  • Convert a wide-character string to a sequence of 16-word blocks, stored as
  • an array, and append appropriate padding for MD4/5 calculation.
    /
    function strw2binl(str) {
    var nblk = ((str.length + 4) >> 5) + 1 // number of 16-word blocks
    var blks = new Array(nblk
    16)
    for (var i = 0; i < nblk 16; i++) blks[i] = 0
    for (var i = 0; i < str.length; i++)
    blks[i >> 1] |= str.charCodeAt(i) << ((i % 2)
    16)
    blks[i >> 1] |= 0x80 << ((i % 2) 16)
    blks[nblk
    16 - 2] = str.length * 16
    return blks
    }

/*

  • External interface
    /
    function hexMD5(str) { return binl2hex(coreMD5(str2binl(str))) }
    function hexMD5w(str) { return binl2hex(coreMD5(strw2binl(str))) }
    function b64MD5(str) { return binl2b64(coreMD5(str2binl(str))) }
    function b64MD5w(str) { return binl2b64(coreMD5(strw2binl(str))) }
    /
    Backward compatibility */
    function calcMD5(str) { return binl2hex(coreMD5(str2binl(str))) }
    module.exports = {
    hexMD5: hexMD5
    }

  然后在js中引入

  至此参数都有了就可以调用:wx.requestPayment

  之后就是回调函数;回调方法接收统一下单方法返回的值,可以这样做,在xcxpay方法里是用&链接的,现在用&分割就可以得到想要的数据,再做处理就Ok!

  告诉微信你已经接到过通知 返回”success”;至此小程序微信支付就搞定了,现在大家通过学习已经知道要规避哪些问题了吧,也知道具体出错在哪里了吧,那么如果还存在有疑问的,可以留言咨询。

  本文由专业的微信小程序开发公司燚轩科技整理发布,原创不易,如需转载请注明出处。

继续阅读 »

  对于开发一款小程序来说,经常是需要做支付功能的,但是大家在做这个功能的时候,往往会发现遇到很多自己无法解决的问题,那么对于这个问题,下面就跟大家详细来分析解答一下吧。

  重点代码部分:
/*

  • A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
  • Digest Algorithm, as defined in RFC 1321.
  • Version 1.1 Copyright (C) Paul Johnston 1999 - 2002.
  • Code also contributed by Greg Holt
  • See http://pajhome.org.uk/site/legal.html for details.
    */

/*

  • Add integers, wrapping at 2^32. This uses 16-bit operations internally
  • to work around bugs in some JS interpreters.
    */
    function safe_add(x, y) {
    var lsw = (x & 0xFFFF) + (y & 0xFFFF)
    var msw = (x >> 16) + (y >> 16) + (lsw >> 16)
    return (msw << 16) | (lsw & 0xFFFF)
    }

/*

  • Bitwise rotate a 32-bit number to the left.
    */
    function rol(num, cnt) {
    return (num << cnt) | (num >>> (32 - cnt))
    }

/*

  • These functions implement the four basic operations the algorithm uses.
    */
    function cmn(q, a, b, x, s, t) {
    return safe_add(rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
    }
    function ff(a, b, c, d, x, s, t) {
    return cmn((b & c) | ((~b) & d), a, b, x, s, t)
    }
    function gg(a, b, c, d, x, s, t) {
    return cmn((b & d) | (c & (~d)), a, b, x, s, t)
    }
    function hh(a, b, c, d, x, s, t) {
    return cmn(b ^ c ^ d, a, b, x, s, t)
    }
    function ii(a, b, c, d, x, s, t) {
    return cmn(c ^ (b | (~d)), a, b, x, s, t)
    }

/*

  • Calculate the MD5 of an array of little-endian words, producing an array
  • of little-endian words.
    */
    function coreMD5(x) {
    var a = 1732584193
    var b = -271733879
    var c = -1732584194
    var d = 271733878

for (var i = 0; i < x.length; i += 16) {
var olda = a
var oldb = b
var oldc = c
var oldd = d

a = ff(a, b, c, d, x[i + 0], 7, -680876936)
d = ff(d, a, b, c, x[i + 1], 12, -389564586)
c = ff(c, d, a, b, x[i + 2], 17, 606105819)
b = ff(b, c, d, a, x[i + 3], 22, -1044525330)
a = ff(a, b, c, d, x[i + 4], 7, -176418897)
d = ff(d, a, b, c, x[i + 5], 12, 1200080426)
c = ff(c, d, a, b, x[i + 6], 17, -1473231341)
b = ff(b, c, d, a, x[i + 7], 22, -45705983)
a = ff(a, b, c, d, x[i + 8], 7, 1770035416)
d = ff(d, a, b, c, x[i + 9], 12, -1958414417)
c = ff(c, d, a, b, x[i + 10], 17, -42063)
b = ff(b, c, d, a, x[i + 11], 22, -1990404162)
a = ff(a, b, c, d, x[i + 12], 7, 1804603682)
d = ff(d, a, b, c, x[i + 13], 12, -40341101)
c = ff(c, d, a, b, x[i + 14], 17, -1502002290)
b = ff(b, c, d, a, x[i + 15], 22, 1236535329)

a = gg(a, b, c, d, x[i + 1], 5, -165796510)
d = gg(d, a, b, c, x[i + 6], 9, -1069501632)
c = gg(c, d, a, b, x[i + 11], 14, 643717713)
b = gg(b, c, d, a, x[i + 0], 20, -373897302)
a = gg(a, b, c, d, x[i + 5], 5, -701558691)
d = gg(d, a, b, c, x[i + 10], 9, 38016083)
c = gg(c, d, a, b, x[i + 15], 14, -660478335)
b = gg(b, c, d, a, x[i + 4], 20, -405537848)
a = gg(a, b, c, d, x[i + 9], 5, 568446438)
d = gg(d, a, b, c, x[i + 14], 9, -1019803690)
c = gg(c, d, a, b, x[i + 3], 14, -187363961)
b = gg(b, c, d, a, x[i + 8], 20, 1163531501)
a = gg(a, b, c, d, x[i + 13], 5, -1444681467)
d = gg(d, a, b, c, x[i + 2], 9, -51403784)
c = gg(c, d, a, b, x[i + 7], 14, 1735328473)
b = gg(b, c, d, a, x[i + 12], 20, -1926607734)

a = hh(a, b, c, d, x[i + 5], 4, -378558)
d = hh(d, a, b, c, x[i + 8], 11, -2022574463)
c = hh(c, d, a, b, x[i + 11], 16, 1839030562)
b = hh(b, c, d, a, x[i + 14], 23, -35309556)
a = hh(a, b, c, d, x[i + 1], 4, -1530992060)
d = hh(d, a, b, c, x[i + 4], 11, 1272893353)
c = hh(c, d, a, b, x[i + 7], 16, -155497632)
b = hh(b, c, d, a, x[i + 10], 23, -1094730640)
a = hh(a, b, c, d, x[i + 13], 4, 681279174)
d = hh(d, a, b, c, x[i + 0], 11, -358537222)
c = hh(c, d, a, b, x[i + 3], 16, -722521979)
b = hh(b, c, d, a, x[i + 6], 23, 76029189)
a = hh(a, b, c, d, x[i + 9], 4, -640364487)
d = hh(d, a, b, c, x[i + 12], 11, -421815835)
c = hh(c, d, a, b, x[i + 15], 16, 530742520)
b = hh(b, c, d, a, x[i + 2], 23, -995338651)

a = ii(a, b, c, d, x[i + 0], 6, -198630844)
d = ii(d, a, b, c, x[i + 7], 10, 1126891415)
c = ii(c, d, a, b, x[i + 14], 15, -1416354905)
b = ii(b, c, d, a, x[i + 5], 21, -57434055)
a = ii(a, b, c, d, x[i + 12], 6, 1700485571)
d = ii(d, a, b, c, x[i + 3], 10, -1894986606)
c = ii(c, d, a, b, x[i + 10], 15, -1051523)
b = ii(b, c, d, a, x[i + 1], 21, -2054922799)
a = ii(a, b, c, d, x[i + 8], 6, 1873313359)
d = ii(d, a, b, c, x[i + 15], 10, -30611744)
c = ii(c, d, a, b, x[i + 6], 15, -1560198380)
b = ii(b, c, d, a, x[i + 13], 21, 1309151649)
a = ii(a, b, c, d, x[i + 4], 6, -145523070)
d = ii(d, a, b, c, x[i + 11], 10, -1120210379)
c = ii(c, d, a, b, x[i + 2], 15, 718787259)
b = ii(b, c, d, a, x[i + 9], 21, -343485551)

a = safe_add(a, olda)
b = safe_add(b, oldb)
c = safe_add(c, oldc)
d = safe_add(d, oldd)
}
return [a, b, c, d]
}

/*

  • Convert an array of little-endian words to a hex string.
    /
    function binl2hex(binarray) {
    var hex_tab = "0123456789abcdef"
    var str = ""
    for (var i = 0; i < binarray.length
    4; i++) {
    str += hex_tab.charAt((binarray[i >> 2] >> ((i % 4) 8 + 4)) & 0xF) +
    hex_tab.charAt((binarray[i >> 2] >> ((i % 4)
    8)) & 0xF)
    }
    return str
    }

/*

  • Convert an array of little-endian words to a base64 encoded string.
    /
    function binl2b64(binarray) {
    var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
    var str = ""
    for (var i = 0; i < binarray.length
    32; i += 6) {
    str += tab.charAt(((binarray[i >> 5] << (i % 32)) & 0x3F) |
    ((binarray[i >> 5 + 1] >> (32 - i % 32)) & 0x3F))
    }
    return str
    }

/*

  • Convert an 8-bit character string to a sequence of 16-word blocks, stored
  • as an array, and append appropriate padding for MD4/5 calculation.
  • If any of the characters are >255, the high byte is silently ignored.
    /
    function str2binl(str) {
    var nblk = ((str.length + 8) >> 6) + 1 // number of 16-word blocks
    var blks = new Array(nblk
    16)
    for (var i = 0; i < nblk 16; i++) blks[i] = 0
    for (var i = 0; i < str.length; i++)
    blks[i >> 2] |= (str.charCodeAt(i) & 0xFF) << ((i % 4)
    8)
    blks[i >> 2] |= 0x80 << ((i % 4) 8)
    blks[nblk
    16 - 2] = str.length * 8
    return blks
    }

/*

  • Convert a wide-character string to a sequence of 16-word blocks, stored as
  • an array, and append appropriate padding for MD4/5 calculation.
    /
    function strw2binl(str) {
    var nblk = ((str.length + 4) >> 5) + 1 // number of 16-word blocks
    var blks = new Array(nblk
    16)
    for (var i = 0; i < nblk 16; i++) blks[i] = 0
    for (var i = 0; i < str.length; i++)
    blks[i >> 1] |= str.charCodeAt(i) << ((i % 2)
    16)
    blks[i >> 1] |= 0x80 << ((i % 2) 16)
    blks[nblk
    16 - 2] = str.length * 16
    return blks
    }

/*

  • External interface
    /
    function hexMD5(str) { return binl2hex(coreMD5(str2binl(str))) }
    function hexMD5w(str) { return binl2hex(coreMD5(strw2binl(str))) }
    function b64MD5(str) { return binl2b64(coreMD5(str2binl(str))) }
    function b64MD5w(str) { return binl2b64(coreMD5(strw2binl(str))) }
    /
    Backward compatibility */
    function calcMD5(str) { return binl2hex(coreMD5(str2binl(str))) }
    module.exports = {
    hexMD5: hexMD5
    }

  然后在js中引入

  至此参数都有了就可以调用:wx.requestPayment

  之后就是回调函数;回调方法接收统一下单方法返回的值,可以这样做,在xcxpay方法里是用&链接的,现在用&分割就可以得到想要的数据,再做处理就Ok!

  告诉微信你已经接到过通知 返回”success”;至此小程序微信支付就搞定了,现在大家通过学习已经知道要规避哪些问题了吧,也知道具体出错在哪里了吧,那么如果还存在有疑问的,可以留言咨询。

  本文由专业的微信小程序开发公司燚轩科技整理发布,原创不易,如需转载请注明出处。

收起阅读 »

【分享】合理地利用入口页初始化应用的信息

登录 首页 5+App开发 h5+ HBuilderX HBuilder manifest.json配置 manifest

开发 5+ App 时,『页面入口』通常会配置为应用的首页。这种配置方式,也存在着一些不方便的地方:

  • 首页比较特殊,一些配置需要在 manifest.json 中填写。比如 titleNView、subNViews 等。
  • 登录状态或者环境语言等信息,可能需要在应用启动的时候尽可能早的获取。这些状态也会影响到首页的信息,修改操作不是很方便。

其实可以换一个思路,利用『页面入口』作为一个初始化的页面。这个页面不显示出来,登录状态或者语言等信息的处理在这里完成。

调整页面

依旧使用 index.html 作为入口,同时调整 splash 为手动关闭。新建一个 home.html 作为实际的首页,id 约定为 home。

index.html

因为这个页面没有实际的内容,因此前面需要将 splash 调整为手动关闭,防止白屏。

在这个页面完成的工作有:

  • 获取登录状态
  • 获取当前系统语言信息
  • 监听 backbutton

获取完相关信息后,打开实际的首页窗口。如果需要用到 titleNView 或者 subNViews,那么在 js 中完成配置或绘制,相较于在 json 中配置会更加灵活。

var url = 'home.html';  
var login = $login.getValue();  
var lang = $lang.getValue();  
var webview = null;  

url += '?login=' + login + '&lang=' + lang;  

webview = plus.webview.create(url, 'home', {  
  titleNView: {  
    backgroundColor: '#ff3333',  
    titleText: '首页',  
    titleColor: '#ffffff',  
  },  
});  
webview.show('none');

注意这里未使用动画效果,一来节省开销,二来动画也看不到。

home.html

这是真正的首页,在这个页面要完成的工作主要有:

  • 获取入口页传递过来的参数信息。
  • 根据参数信息,初始化相应的内容。
  • 在合理的时机选择关闭 splash。

登录

未登录状态下,其实有两种引导用户登录的方式。

  • 弹框提示用户去登录。
  • 直接打开登录页,并且登录页点击 back 触发退出的逻辑。

如果选择直接打开登录页,就可以理解为应用是强制需要登录的,那么登录页 back 需要走退出的逻辑。并且 splash 的关闭也应当在登录页完成。

语言

语言信息的初始化,建议两种方式。

  • 应用本地 js 中存储配置读取。
  • 联网从服务器拉取。

无论选择哪种方式,都应当在渲染语言信息相关的内容后,再选择关闭 splash。

结束

实际开发中,需要根据业务场景灵活掌握,而非一成不变。附件中有一个简单的示例项目,下载后直接拖到 HBuilder/HBuilderX 中真机运行即可预览效果。

注意:这是 5+ App 是移动应用,不要再问为什么浏览器中没有效果这种问题了。

继续阅读 »

开发 5+ App 时,『页面入口』通常会配置为应用的首页。这种配置方式,也存在着一些不方便的地方:

  • 首页比较特殊,一些配置需要在 manifest.json 中填写。比如 titleNView、subNViews 等。
  • 登录状态或者环境语言等信息,可能需要在应用启动的时候尽可能早的获取。这些状态也会影响到首页的信息,修改操作不是很方便。

其实可以换一个思路,利用『页面入口』作为一个初始化的页面。这个页面不显示出来,登录状态或者语言等信息的处理在这里完成。

调整页面

依旧使用 index.html 作为入口,同时调整 splash 为手动关闭。新建一个 home.html 作为实际的首页,id 约定为 home。

index.html

因为这个页面没有实际的内容,因此前面需要将 splash 调整为手动关闭,防止白屏。

在这个页面完成的工作有:

  • 获取登录状态
  • 获取当前系统语言信息
  • 监听 backbutton

获取完相关信息后,打开实际的首页窗口。如果需要用到 titleNView 或者 subNViews,那么在 js 中完成配置或绘制,相较于在 json 中配置会更加灵活。

var url = 'home.html';  
var login = $login.getValue();  
var lang = $lang.getValue();  
var webview = null;  

url += '?login=' + login + '&lang=' + lang;  

webview = plus.webview.create(url, 'home', {  
  titleNView: {  
    backgroundColor: '#ff3333',  
    titleText: '首页',  
    titleColor: '#ffffff',  
  },  
});  
webview.show('none');

注意这里未使用动画效果,一来节省开销,二来动画也看不到。

home.html

这是真正的首页,在这个页面要完成的工作主要有:

  • 获取入口页传递过来的参数信息。
  • 根据参数信息,初始化相应的内容。
  • 在合理的时机选择关闭 splash。

登录

未登录状态下,其实有两种引导用户登录的方式。

  • 弹框提示用户去登录。
  • 直接打开登录页,并且登录页点击 back 触发退出的逻辑。

如果选择直接打开登录页,就可以理解为应用是强制需要登录的,那么登录页 back 需要走退出的逻辑。并且 splash 的关闭也应当在登录页完成。

语言

语言信息的初始化,建议两种方式。

  • 应用本地 js 中存储配置读取。
  • 联网从服务器拉取。

无论选择哪种方式,都应当在渲染语言信息相关的内容后,再选择关闭 splash。

结束

实际开发中,需要根据业务场景灵活掌握,而非一成不变。附件中有一个简单的示例项目,下载后直接拖到 HBuilder/HBuilderX 中真机运行即可预览效果。

注意:这是 5+ App 是移动应用,不要再问为什么浏览器中没有效果这种问题了。

收起阅读 »

为什么我要用GoEasy替代WebSocket

WEBSOCKET

最近一个紧急项目里,出于考虑节约开发成本和缩短开发周期的目的,我选择用GoEasy来替代自己搭建WebSocket,当然我也考虑过workerman和融云等同类型的产品。最后选择GoEasy的原因只有2点,极简、稳定。
我可以来说一下我在项目里从GoEasy得到了哪些实质性的帮助,这里敲黑板,可能其中的一到两条就是你想要的。

uniapp websocket体验demo:https://ext.dcloud.net.cn/plugin?id=1334

1 简单
我是写Java的,GoEasy里有自己的依赖包,我从注册到获取APP key,到自己写好代码到跑通推送不到30分钟,在我看来这是目前能最大程度减少开发成本和缩短开发周期的三方WebSocket的产品。从GoEasy这边所需要获取的也只有1个APP key和1个地址。

2 稳定
因为简单心里肯定会充满不确定性,担心稳定性不高,看官网所说的多集群和可靠容灾,因为我购买的消息数量不多,测了1W条,从开始到完成0.67S,没有漏发,还是很稳定的。

3 兼容性
从浏览器到代码类型,GoEasy兼容性做的可以说是很完善了,我从IE6开始测,目前没有发现不支持的浏览器。同时官网上的快速入门可以看到,可以支持任何开发语言。

4 安全
我这个项目消息推送数量不多,但是并发连接数量会比较多一点,所以我付了费增加并发数量,同时也体验了一下GoEasy所谓的独创的OTP技术,在app key和推送消息隐私方面做的很不错,具体的不多说,有兴趣可以去自己去了解一下。

5 应用范围
可以说GoEasy 的应用范围非常广泛了,整个WebScoket这一块完全不用你管,我觉得可以适用于任何web项目中。

这是我从用GoEasy得到的总结,当然可能没有说的很完整,如果你现在需求WebSocket而没有太多的时间去做这一块的话,可以去试试GoEasy的免费版。推荐原因很简单,因为真的很简单。(www.goeasy.io)

继续阅读 »

最近一个紧急项目里,出于考虑节约开发成本和缩短开发周期的目的,我选择用GoEasy来替代自己搭建WebSocket,当然我也考虑过workerman和融云等同类型的产品。最后选择GoEasy的原因只有2点,极简、稳定。
我可以来说一下我在项目里从GoEasy得到了哪些实质性的帮助,这里敲黑板,可能其中的一到两条就是你想要的。

uniapp websocket体验demo:https://ext.dcloud.net.cn/plugin?id=1334

1 简单
我是写Java的,GoEasy里有自己的依赖包,我从注册到获取APP key,到自己写好代码到跑通推送不到30分钟,在我看来这是目前能最大程度减少开发成本和缩短开发周期的三方WebSocket的产品。从GoEasy这边所需要获取的也只有1个APP key和1个地址。

2 稳定
因为简单心里肯定会充满不确定性,担心稳定性不高,看官网所说的多集群和可靠容灾,因为我购买的消息数量不多,测了1W条,从开始到完成0.67S,没有漏发,还是很稳定的。

3 兼容性
从浏览器到代码类型,GoEasy兼容性做的可以说是很完善了,我从IE6开始测,目前没有发现不支持的浏览器。同时官网上的快速入门可以看到,可以支持任何开发语言。

4 安全
我这个项目消息推送数量不多,但是并发连接数量会比较多一点,所以我付了费增加并发数量,同时也体验了一下GoEasy所谓的独创的OTP技术,在app key和推送消息隐私方面做的很不错,具体的不多说,有兴趣可以去自己去了解一下。

5 应用范围
可以说GoEasy 的应用范围非常广泛了,整个WebScoket这一块完全不用你管,我觉得可以适用于任何web项目中。

这是我从用GoEasy得到的总结,当然可能没有说的很完整,如果你现在需求WebSocket而没有太多的时间去做这一块的话,可以去试试GoEasy的免费版。推荐原因很简单,因为真的很简单。(www.goeasy.io)

收起阅读 »

开发app是找专业的开发公司好还是自主研发好呢

5 App开发

  做app开发是找专业的郑州app开发公司好,还是自己组建团队好呢?其实对于这样的选择,很多人都不知道有什么区别,因此在选择的时候比较犯难,那么对于这样的问题,下面就为大家分析解答一下吧。

  一、专业的APP开发公司制作

  1、app开发分为部分外包和全部外包。部分外包是指发包者自己完成一部分工作比如企划、美工或者其他一部分技术,剩下的其他部分由app开发公司的专业工程师完成,这样发包者公司是主导者,外包公司或者外包团队只负责配合工作。

  2、沟通。外包项目最需要的就是沟通,不管是部分外包还是全部外包,都是需要相互沟通的,只是部分外包要比全部外包的沟通少一些。全部外包是指发包者提供功能需求,从原型图、UI设计到程序开发全部交由专业的外包公司来完成,这是行业里最常见的一种方式,但是全部外包需要事情进行充分的沟通,不然极易引发矛盾,做出的APP项目和客户想象中的差别大,再改动的话耗时耗力,错失了进入市场的时机,那对于双方来说得不偿失。

  3、金钱成本。不管是部分外包还是全部外包,外包公司都是根据功能需求和工期进行报价的,这样的话发包者只需要拿出这些成本即可,一般来说要比自己组建团队要节省不少。

  二、自主研发APP

  1、创建团队。自己创建开发团队进行APP开发的话,至少要包括产品经理、项目经理、UI设计师、后台技术员、安卓技术员、IOS技术员、测试人员,这样才能算是一个完整的开发团队。

  2、时间。对于刚组建的开发团队,一切要从零开始,招聘员工需要一定的时间,团队人员相互磨合写作需要时间,这样的话,估计需要两三个月的时间才能组建成功。

  3、金钱成本。按照现在的工资每个部门一个人来算,产品经理、项目经理大概在6000~8000左右,技术人员工资大概在10000左右,再加上办公室租金、物业费、水电费等等一些环境成本,还有时间成本,想要开发出一个高质量的APP项目,成本花费至少在50万以上。

  以上就是小编总结的关于APP开发是自主研发还是找专业的app软件开发公司,这就要根据自身情况来决定,对于没有团队而经费又不多的创业者来说,APP开发就像一道没有答案的选择题,到底选择哪种开发方式,需要自己慎重考虑,谨慎选择。本文由专业的郑州app开发公司燚轩科技整理发布,如需转载请注明出处。

继续阅读 »

  做app开发是找专业的郑州app开发公司好,还是自己组建团队好呢?其实对于这样的选择,很多人都不知道有什么区别,因此在选择的时候比较犯难,那么对于这样的问题,下面就为大家分析解答一下吧。

  一、专业的APP开发公司制作

  1、app开发分为部分外包和全部外包。部分外包是指发包者自己完成一部分工作比如企划、美工或者其他一部分技术,剩下的其他部分由app开发公司的专业工程师完成,这样发包者公司是主导者,外包公司或者外包团队只负责配合工作。

  2、沟通。外包项目最需要的就是沟通,不管是部分外包还是全部外包,都是需要相互沟通的,只是部分外包要比全部外包的沟通少一些。全部外包是指发包者提供功能需求,从原型图、UI设计到程序开发全部交由专业的外包公司来完成,这是行业里最常见的一种方式,但是全部外包需要事情进行充分的沟通,不然极易引发矛盾,做出的APP项目和客户想象中的差别大,再改动的话耗时耗力,错失了进入市场的时机,那对于双方来说得不偿失。

  3、金钱成本。不管是部分外包还是全部外包,外包公司都是根据功能需求和工期进行报价的,这样的话发包者只需要拿出这些成本即可,一般来说要比自己组建团队要节省不少。

  二、自主研发APP

  1、创建团队。自己创建开发团队进行APP开发的话,至少要包括产品经理、项目经理、UI设计师、后台技术员、安卓技术员、IOS技术员、测试人员,这样才能算是一个完整的开发团队。

  2、时间。对于刚组建的开发团队,一切要从零开始,招聘员工需要一定的时间,团队人员相互磨合写作需要时间,这样的话,估计需要两三个月的时间才能组建成功。

  3、金钱成本。按照现在的工资每个部门一个人来算,产品经理、项目经理大概在6000~8000左右,技术人员工资大概在10000左右,再加上办公室租金、物业费、水电费等等一些环境成本,还有时间成本,想要开发出一个高质量的APP项目,成本花费至少在50万以上。

  以上就是小编总结的关于APP开发是自主研发还是找专业的app软件开发公司,这就要根据自身情况来决定,对于没有团队而经费又不多的创业者来说,APP开发就像一道没有答案的选择题,到底选择哪种开发方式,需要自己慎重考虑,谨慎选择。本文由专业的郑州app开发公司燚轩科技整理发布,如需转载请注明出处。

收起阅读 »

[uni-app/H5+/MUI]学习讨论群组: 646444826

5+App开发 移动APP uniapp

uni-app  
H5+  
MUI  
有问题找组织  

学习讨论群组: 646444826

uni-app  
H5+  
MUI  
有问题找组织  

学习讨论群组: 646444826

实操:商品列表三级分类的实现方法

  对于分类来说,一般包括一级分类,二级分类,三级分类,一般2级分类是比较好做的,大部分网站都是左边点击二级分类,右边显示相对应商品,这就要用到jquery技术了。下面就来为大家详细分析一下该如何实现吧。

  首先把二级分类给全部遍历出来,Html代码如下:
<volist name='cate' id='vo'>
<li <if condition="$Think.get.name eq $vo['name']">class="active"</if> onclick="funbrand('{$vo.name}','{$vo.id}')" ">
<span style="font-weight: 600;font-size: 13px;height: 45px; display: flex;justify-content: center;align-items: center;padding: 0;border-right: 5px solid white;" data="{$vo.id}" name="cateid" title="">{$vo.name}</span>
</li>
</volist>

根据需求添加点击事件,写jquery:
jquery代码如下:
function funbrand(id,obj){
debugger;
$(obj).addClass('active');

$(obj).siblings('a').removeClass('active');  
cateid=$("span[name='cateid']").attr('data');  

$('.all').removeClass('active');  
var test=$('.all').attr('title');   
var goodscateid = id;  
 cate_id=$("input[name='cateid1']").val();  
$('#id').val(goodscateid);  
var types = $('#type').val();  
$.ajax({  
    url:"{:U('Mobile/goods1')}",  
    data:{goodscateid:goodscateid,types:types,cate_id:cate_id},  
    dataType:"json",  
    type:"post",  
    success:function(data){  
        alert(data.v);  
        str = '';  
        $('.good_list').empty();  
        if (data.status==1) {  

            $.each(data.shops,function(index,obj){  

             str+='<dl class="clearfix">';  

             if(test=='套餐'){  
                 str+='<dt class="col-sm-5 col-xs-5"  style="text-align: center;margin-bottom:25px;margin-top:25px">';  
                 str+='<a style="color:#000;width:200px;overflow:hidden;" href="{:U("Mobile/good_detail")}?gid='+obj.gid+'">';  
                 str+='<em><img src="/Public/Admin/kindeditor-4.1.10/attached/image'+obj.thumb+'" style="width:80%;margin-top:1rem;" class="img-responsive center-block"></em>';  
                     str+='<dd class="col-sm-7 col-xs-7" style="height:14rem;padding-top: 10px;"><div style="height:50px; overflow:hidden;"><h4 style="height: 30px; line-height: 10px; color:#000; ">'+obj.gname+'</h4></div><p style=" font-size:18px;"> .... </p><br/> <p class="money" style="margin-top:0px; margin-bottom:-10px; "><i>¥</i>'+obj.price+'</p><br>';  
             }else{  
                 str+='<dt class="col-sm-5 col-xs-5"  style="text-align: center;margin-bottom:8px;margin-top:8px">';  
                 str+='<a style="color:#000;width:200px;overflow:hidden;" href="{:U("Mobile/good_detail")}?gid='+obj.gid+'">';  
                 str+='<em><img src="/Public/Admin/kindeditor-4.1.10/attached/image'+obj.thumb+'" style="width:80%;margin-top:1rem;" class="img-responsive center-block"></em>';  
               str+='<span>'+obj.norms+'/'+obj.unity+'</span></a></dt>';  
                str+='<dd class="col-sm-7 col-xs-7" style="height:14rem;padding-top: 10px;"> <h4 style="height: 30px; line-height: 15px; color:#000; ">'+obj.gname+'</h4> <p class="money" style="margin-top:30px; margin-bottom:-10px; "><i>¥</i>'+obj.price+'</p><br>';  
            }   

            if (obj.quota!='0') {  
                    str+=' <span style="border: 1px solid #c63731; padding:2px; color:#c63731;border-radius: 8px; font-size: 10px;">'  
                    str+='限购'+obj.quota+ obj.unity;               
                   str+='</span>';  
                     }  
               if (obj.repertor==0) {  
                   if(test=='套餐'){  
                         str+=' <em title="'+obj.gid+'" class="addcar" att="'+obj.addnum+'" style="position:absolute;bottom:-15px;right:0px;">';  
                        str+='<img src="/Public/Mobile/images/add_cart.png" class="img-responsive"  width="30" /></em>';  

                    }else{  
                         str+=' <em title="'+obj.gid+'" class="addcar" att="'+obj.addnum+'" style="position:absolute;bottom:5px;right:0px;">';  
                         str+='<img src="/Public/Mobile/images/add_cart.png" class="img-responsive"  width="30" /></em>';   
                    }  

                      }else{  
                         str+='<em>补货中</em>'  
                    }  
                str+=' </dd></dl>';  
                     })  
            $('.good_list').append(str);  
            $('.good_list').html(str).ready(function(){  

                 $(".addcar").click(function(){  
                 // debugger;  
                var uid = $('#uid').val();  
                var gid = $(this).attr('title');  
                // var cnum = $(this).parent().find("input[class*=num_val]").val();  
                // alert(uid);  
                var cnum=$(this).attr('att');  
                if (uid=='') {  
                    alert('请先登陆');  
                    location="{:U('Mobile/login')}";  
                    return false;  
                }  

                 $.ajax({  
                    url:"{:U('Mobile/goods_info')}",  
                    data:{gid:gid},  
                    dataType:"json",  
                    type:"post",  

                     success:function(data){  
                      // alert(data);  
                        // alert(data.thumb);  
                         // $(".img").src('/Public/Admin/kindeditor-4.1.10/attached/image'+data.thumb);  
                        var thumb=data.thumb;  
                        var tep='/Public/Admin/kindeditor-4.1.10/attached/image'+thumb;  
                          $("#shopping_img").attr('src', src=tep) ;  
                          $('.mo_shopping_quota').text(data.quota);  
                          $('.mo_shopping_gid').text(data.gid);  
                         $(".title").text(data.gname);  
                         $(".shopping_gui").text(data.norms+'/'+data.unity);  
                         $('.shopping_money').text(data.price);  
                         $('.shelflife').text(data.shelflife);  
                         $('.mo_shopping_gid').text(data.gid);   
                        $('.mo_shopping_addnum').text(data.addnum);  
                          $(".mo_shopping").css("display","block");  
                          $('.num').val(data.addnum);  
                         }  
                     })  

                 })  

             });  
         }  
     },  
 })  

}

Php查询并输出,代码如下:
public function goods1(){
$goodscateid=I('goodscateid');
$cate_id=I('cate_id');
$where['brandid']=array('exp',"regexp '(,|^)" .'$cate_id'."(,|$)'");
// $where['bid']=$goodscateid;
// $info=M("brandlist")->where("bid=$goodscateid")->find();
$info=M("brandlist")->where($where)->select();
foreach ($info as $key => $value) {
$bname=$value['bname'];
$shops[] = M('goodsinfo')->where("brandlist='$bname'")->order("gid desc")->find();
}

 foreach ($shops as $key => $value) {  
      $pic=explode(",",substr($value['thumb'],1,strlen($value['thumb'])));  
      $shops[$key]['thumb']=$pic[0];  
}  
if ($shops) {  
      $returnValue['status']=1;  
      $returnValue['shops']=$shops;  

    }else{  
  $returnValue['status']=2;  

    }  
$this->ajaxReturn($returnValue);  

}

  好了,现在大家已经知道该怎么做了吧,那么如果还存在有疑问的,可以留言咨询,我们可以共同讨论,一起学习进步。

  本文由专业的郑州app开发公司燚轩科技整理发布,原创不易,如需转载请注明原文作者及出处!

继续阅读 »

  对于分类来说,一般包括一级分类,二级分类,三级分类,一般2级分类是比较好做的,大部分网站都是左边点击二级分类,右边显示相对应商品,这就要用到jquery技术了。下面就来为大家详细分析一下该如何实现吧。

  首先把二级分类给全部遍历出来,Html代码如下:
<volist name='cate' id='vo'>
<li <if condition="$Think.get.name eq $vo['name']">class="active"</if> onclick="funbrand('{$vo.name}','{$vo.id}')" ">
<span style="font-weight: 600;font-size: 13px;height: 45px; display: flex;justify-content: center;align-items: center;padding: 0;border-right: 5px solid white;" data="{$vo.id}" name="cateid" title="">{$vo.name}</span>
</li>
</volist>

根据需求添加点击事件,写jquery:
jquery代码如下:
function funbrand(id,obj){
debugger;
$(obj).addClass('active');

$(obj).siblings('a').removeClass('active');  
cateid=$("span[name='cateid']").attr('data');  

$('.all').removeClass('active');  
var test=$('.all').attr('title');   
var goodscateid = id;  
 cate_id=$("input[name='cateid1']").val();  
$('#id').val(goodscateid);  
var types = $('#type').val();  
$.ajax({  
    url:"{:U('Mobile/goods1')}",  
    data:{goodscateid:goodscateid,types:types,cate_id:cate_id},  
    dataType:"json",  
    type:"post",  
    success:function(data){  
        alert(data.v);  
        str = '';  
        $('.good_list').empty();  
        if (data.status==1) {  

            $.each(data.shops,function(index,obj){  

             str+='<dl class="clearfix">';  

             if(test=='套餐'){  
                 str+='<dt class="col-sm-5 col-xs-5"  style="text-align: center;margin-bottom:25px;margin-top:25px">';  
                 str+='<a style="color:#000;width:200px;overflow:hidden;" href="{:U("Mobile/good_detail")}?gid='+obj.gid+'">';  
                 str+='<em><img src="/Public/Admin/kindeditor-4.1.10/attached/image'+obj.thumb+'" style="width:80%;margin-top:1rem;" class="img-responsive center-block"></em>';  
                     str+='<dd class="col-sm-7 col-xs-7" style="height:14rem;padding-top: 10px;"><div style="height:50px; overflow:hidden;"><h4 style="height: 30px; line-height: 10px; color:#000; ">'+obj.gname+'</h4></div><p style=" font-size:18px;"> .... </p><br/> <p class="money" style="margin-top:0px; margin-bottom:-10px; "><i>¥</i>'+obj.price+'</p><br>';  
             }else{  
                 str+='<dt class="col-sm-5 col-xs-5"  style="text-align: center;margin-bottom:8px;margin-top:8px">';  
                 str+='<a style="color:#000;width:200px;overflow:hidden;" href="{:U("Mobile/good_detail")}?gid='+obj.gid+'">';  
                 str+='<em><img src="/Public/Admin/kindeditor-4.1.10/attached/image'+obj.thumb+'" style="width:80%;margin-top:1rem;" class="img-responsive center-block"></em>';  
               str+='<span>'+obj.norms+'/'+obj.unity+'</span></a></dt>';  
                str+='<dd class="col-sm-7 col-xs-7" style="height:14rem;padding-top: 10px;"> <h4 style="height: 30px; line-height: 15px; color:#000; ">'+obj.gname+'</h4> <p class="money" style="margin-top:30px; margin-bottom:-10px; "><i>¥</i>'+obj.price+'</p><br>';  
            }   

            if (obj.quota!='0') {  
                    str+=' <span style="border: 1px solid #c63731; padding:2px; color:#c63731;border-radius: 8px; font-size: 10px;">'  
                    str+='限购'+obj.quota+ obj.unity;               
                   str+='</span>';  
                     }  
               if (obj.repertor==0) {  
                   if(test=='套餐'){  
                         str+=' <em title="'+obj.gid+'" class="addcar" att="'+obj.addnum+'" style="position:absolute;bottom:-15px;right:0px;">';  
                        str+='<img src="/Public/Mobile/images/add_cart.png" class="img-responsive"  width="30" /></em>';  

                    }else{  
                         str+=' <em title="'+obj.gid+'" class="addcar" att="'+obj.addnum+'" style="position:absolute;bottom:5px;right:0px;">';  
                         str+='<img src="/Public/Mobile/images/add_cart.png" class="img-responsive"  width="30" /></em>';   
                    }  

                      }else{  
                         str+='<em>补货中</em>'  
                    }  
                str+=' </dd></dl>';  
                     })  
            $('.good_list').append(str);  
            $('.good_list').html(str).ready(function(){  

                 $(".addcar").click(function(){  
                 // debugger;  
                var uid = $('#uid').val();  
                var gid = $(this).attr('title');  
                // var cnum = $(this).parent().find("input[class*=num_val]").val();  
                // alert(uid);  
                var cnum=$(this).attr('att');  
                if (uid=='') {  
                    alert('请先登陆');  
                    location="{:U('Mobile/login')}";  
                    return false;  
                }  

                 $.ajax({  
                    url:"{:U('Mobile/goods_info')}",  
                    data:{gid:gid},  
                    dataType:"json",  
                    type:"post",  

                     success:function(data){  
                      // alert(data);  
                        // alert(data.thumb);  
                         // $(".img").src('/Public/Admin/kindeditor-4.1.10/attached/image'+data.thumb);  
                        var thumb=data.thumb;  
                        var tep='/Public/Admin/kindeditor-4.1.10/attached/image'+thumb;  
                          $("#shopping_img").attr('src', src=tep) ;  
                          $('.mo_shopping_quota').text(data.quota);  
                          $('.mo_shopping_gid').text(data.gid);  
                         $(".title").text(data.gname);  
                         $(".shopping_gui").text(data.norms+'/'+data.unity);  
                         $('.shopping_money').text(data.price);  
                         $('.shelflife').text(data.shelflife);  
                         $('.mo_shopping_gid').text(data.gid);   
                        $('.mo_shopping_addnum').text(data.addnum);  
                          $(".mo_shopping").css("display","block");  
                          $('.num').val(data.addnum);  
                         }  
                     })  

                 })  

             });  
         }  
     },  
 })  

}

Php查询并输出,代码如下:
public function goods1(){
$goodscateid=I('goodscateid');
$cate_id=I('cate_id');
$where['brandid']=array('exp',"regexp '(,|^)" .'$cate_id'."(,|$)'");
// $where['bid']=$goodscateid;
// $info=M("brandlist")->where("bid=$goodscateid")->find();
$info=M("brandlist")->where($where)->select();
foreach ($info as $key => $value) {
$bname=$value['bname'];
$shops[] = M('goodsinfo')->where("brandlist='$bname'")->order("gid desc")->find();
}

 foreach ($shops as $key => $value) {  
      $pic=explode(",",substr($value['thumb'],1,strlen($value['thumb'])));  
      $shops[$key]['thumb']=$pic[0];  
}  
if ($shops) {  
      $returnValue['status']=1;  
      $returnValue['shops']=$shops;  

    }else{  
  $returnValue['status']=2;  

    }  
$this->ajaxReturn($returnValue);  

}

  好了,现在大家已经知道该怎么做了吧,那么如果还存在有疑问的,可以留言咨询,我们可以共同讨论,一起学习进步。

  本文由专业的郑州app开发公司燚轩科技整理发布,原创不易,如需转载请注明原文作者及出处!

收起阅读 »

创建一个uniApp小组织!欢迎大家一起来交流采坑!

uniapp

以前一直用Dcloud和api开发混合app,最近官方推出一个uniApp 总要一起采坑吧,欢迎大家进群一起交流或者分享经验。

QQ群:854873282。

以前一直用Dcloud和api开发混合app,最近官方推出一个uniApp 总要一起采坑吧,欢迎大家进群一起交流或者分享经验。

QQ群:854873282。

app开发容易吗,最快的开发制作时间是多久

5 App开发

  开发一个app多少钱?开发一个app需要多长的时间?这是很多的客户都会问到的一个问题。根据客户的开发的app的类型,开发的需求,不同的app开发都会有范围内的变化。但是一般的app开发的周期在3到6个月,如果需要开发的app功能比较的复杂,或者很特别,有或者有很多新的创意元素,其开发的周期也会相应的延长。如果想要知道具体的app开发的时间需要多久的话,那么下面就跟大家讲解一下app开发中各阶段所花费的大概时间。

  想要了解开发一款app需要多长时间,需要先知道影响一个app开发的周期的因素有什么呢?除了是选择开发方案的定制还是选择模板以外,还有其他因素影响,这里以定制开发的方案,根据开发方案上的要求,定制开发,满足所有的功能需求。开发的流程中各个阶段需要花费的大概时间。

  1、数据整合:允许用户访问数据,向第三方展示数据。所花费时间大致为2-3天;

  2、数据储存:建立本地的app板块,也就是后端进行实现数据储存。所花时间大致为3-5天;

  3、用户账号管理:创建用户账号的管理,接入管理系统。几分钟时间就可以搞定,不计入总开发时间内;

  4、框架设计:根据开发的要求,设计app的框架,进行用户的体验和交互。所花时间大致为1-2天;

  5、UI设计:根据app的特点设计良好的用户体验UI,保持界面的良好的交互性。所花时间大致为7-10天左右;

  7、UI开发;把UI的模块转变成可以运行的代码,功能界面。所花时间大致为1-2天;

  8、程序语言开发:根据app开发的功能等各方面的要求,开发出可运行的程序语言,变成可实现功能的app。所花时间大致为2-3个月;

  9、app测试:测试app的功能性、交互性。站在用户的角度测试app的各方面的内容,包括是bug修复。所花时间大致为3-5天;

  10、反复的测试app,不断的完善app功能,交互,实现开发方案的所有的需求。所花时间大致为2-3天。

  影响一个app的开发的周期时间的因素有前端设计、用户界面、 后端整合、用户管理、身份验证等。一个专业的app开发公司能够根据多年来的开发经验,尽量的缩短开发的时间长度,满足客户的要求。信息来由郑州app开发公司燚轩科技整理发布。

继续阅读 »

  开发一个app多少钱?开发一个app需要多长的时间?这是很多的客户都会问到的一个问题。根据客户的开发的app的类型,开发的需求,不同的app开发都会有范围内的变化。但是一般的app开发的周期在3到6个月,如果需要开发的app功能比较的复杂,或者很特别,有或者有很多新的创意元素,其开发的周期也会相应的延长。如果想要知道具体的app开发的时间需要多久的话,那么下面就跟大家讲解一下app开发中各阶段所花费的大概时间。

  想要了解开发一款app需要多长时间,需要先知道影响一个app开发的周期的因素有什么呢?除了是选择开发方案的定制还是选择模板以外,还有其他因素影响,这里以定制开发的方案,根据开发方案上的要求,定制开发,满足所有的功能需求。开发的流程中各个阶段需要花费的大概时间。

  1、数据整合:允许用户访问数据,向第三方展示数据。所花费时间大致为2-3天;

  2、数据储存:建立本地的app板块,也就是后端进行实现数据储存。所花时间大致为3-5天;

  3、用户账号管理:创建用户账号的管理,接入管理系统。几分钟时间就可以搞定,不计入总开发时间内;

  4、框架设计:根据开发的要求,设计app的框架,进行用户的体验和交互。所花时间大致为1-2天;

  5、UI设计:根据app的特点设计良好的用户体验UI,保持界面的良好的交互性。所花时间大致为7-10天左右;

  7、UI开发;把UI的模块转变成可以运行的代码,功能界面。所花时间大致为1-2天;

  8、程序语言开发:根据app开发的功能等各方面的要求,开发出可运行的程序语言,变成可实现功能的app。所花时间大致为2-3个月;

  9、app测试:测试app的功能性、交互性。站在用户的角度测试app的各方面的内容,包括是bug修复。所花时间大致为3-5天;

  10、反复的测试app,不断的完善app功能,交互,实现开发方案的所有的需求。所花时间大致为2-3天。

  影响一个app的开发的周期时间的因素有前端设计、用户界面、 后端整合、用户管理、身份验证等。一个专业的app开发公司能够根据多年来的开发经验,尽量的缩短开发的时间长度,满足客户的要求。信息来由郑州app开发公司燚轩科技整理发布。

收起阅读 »

[uni-app/H5+/MUI]学习讨论群组: 418967623


uni-app  
H5+  
MUI  
有问题找组织  
学习讨论群组: 418967623  
-------------

uni-app  
H5+  
MUI  
有问题找组织  
学习讨论群组: 418967623  
-------------