小程序模板网

微信小程序开发我遇到的一些坑和建议:智能客服的实现,提醒的实现,支付实

发布时间:2018-04-18 09:21 所属栏目:小程序开发教程

作者:kongshanxuelin,来自原文地址 
小程序最近火了,所以我也花点时间研究了下,同时自己也练练手做了一个小程序“商务工作记事册”,在微信小程序里可以被搜索到,接下去我讲讲我开发过程中遇到的一些坑吧,主要针对后台。

主要功能:

  • 支付接口调测:点击支持我们,可以直接捐赠;
  • 提醒功能:主要使用客服通知以及微信小卡片通知;
  • 自定义账本字段:主要就各种Event的Tag可以扩展字段;
  • 文件上传下载:支持事件上传图片,录音文件;

首先要做到上面这些,后台必须要从小程序平台得到的信息如下图:

准备工作就绪,讲讲我开发这个小程序遇到的一些问题以及相应实现吧

 

前端问题

  • 高度不能用rpx,不然无法计算以及自适应,所以我后来改成了px,不知道有没有更好的方案;
  • 首页应该要验证token合法性,要去服务器请求验证,这个过程是异步的,所以在载入首页之前应该有个splash过渡窗口引导,不然进入首页token非法的就将无法请求到数据,不知道有没有更好的方案;
  • 排版布局使用的是weui,不知道还有没有更好的wxss可以使用;
  • 由于异步调用多会乱,所以后来引入的Promise,好很多;
 

后台问题

支付实现; 
支付微信为了安全性,增加了数字签名,首先你要发起一个订单,得到订单号,有了这个订单号,就可以启动微信支付功能了,以下是代码:

 

  1. public JSONObject prePay() throws Exception{
  2. UserBean ub = getWxUser();
  3. if(ub!=null){
  4. String appid = (StrUtil.formatNullStr(TagConst.globalMap.get("wx.appid")));
  5. String appkey = (StrUtil.formatNullStr(TagConst.globalMap.get("wx.seckey")));
  6. String mch_id = (StrUtil.formatNullStr(TagConst.globalMap.get("wx.mchid")));
  7. String mchkey = (StrUtil.formatNullStr(TagConst.globalMap.get("wx.mchkey")));
  8.  
  9. String openId = ub.getUid();
  10. String clientIP = HttpUtils.getIP(request);
  11. if(clientIP.indexOf(":")>0) clientIP = "127.0.0.1";
  12.  
  13. String fee = StrUtil.formatNullStr(request.getParameter("fee"),"1");
  14. String body = StrUtil.formatNullStr(request.getParameter("body"));
  15. String atta = StrUtil.formatNullStr(request.getParameter("atta"));
  16.  
  17. String nonce_str = UUIDHexGenerator.generate();
  18. String today = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
  19. String code = PayUtil.createCode(8);
  20. String out_trade_no = mch_id+today+code;//商户订单号
  21. String spbill_create_ip = clientIP;//终端IP
  22. String trade_type = "JSAPI";//交易类型
  23. String openid=openId;//用户标识
  24. /**/
  25. PayInfo paymentPo = new PayInfo();
  26. paymentPo.setAppid(appid);
  27. paymentPo.setMch_id(mch_id);
  28. paymentPo.setNonce_str(nonce_str);
  29. paymentPo.setBody(body);
  30. paymentPo.setOut_trade_no(out_trade_no);
  31. paymentPo.setTotal_fee(fee);
  32. paymentPo.setSpbill_create_ip(spbill_create_ip);
  33. paymentPo.setNotify_url(URL_NOTIFY);
  34. paymentPo.setTrade_type(trade_type);
  35. paymentPo.setOpenid(openid);
  36. // 把请求参数打包成数组
  37. Map<String, String> sParaTemp = new HashMap<String, String>();
  38. sParaTemp.put("appid", paymentPo.getAppid());
  39. sParaTemp.put("mch_id", paymentPo.getMch_id());
  40. sParaTemp.put("nonce_str", paymentPo.getNonce_str());
  41. sParaTemp.put("body", paymentPo.getBody());
  42. sParaTemp.put("out_trade_no", paymentPo.getOut_trade_no());
  43. sParaTemp.put("total_fee",paymentPo.getTotal_fee());
  44. sParaTemp.put("spbill_create_ip", paymentPo.getSpbill_create_ip());
  45. sParaTemp.put("notify_url",paymentPo.getNotify_url());
  46. sParaTemp.put("trade_type", paymentPo.getTrade_type());
  47. sParaTemp.put("openid", paymentPo.getOpenid());
  48. // 除去数组中的空值和签名参数
  49. Map<String, String> sPara = PayUtil.paraFilter(sParaTemp);
  50. String prestr = PayUtil.createLinkString(sPara); // 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
  51. String key = "&key="+mchkey; // 商户支付密钥
  52. //MD5运算生成签名
  53. String mysign = PayUtil.sign(prestr, key, "utf-8").toUpperCase();
  54. paymentPo.setSign(mysign);
  55. String respXml = MessageUtil.messageToXML(paymentPo);
  56. respXml = respXml.replace("__", "_");
  57. String url = "https://api.mch.weixin.qq.com/pay/unifiedorder";
  58. String param = respXml;
  59. String result =PayUtil.httpRequest(url, "POST", param);
  60. Map<String, String> map = new HashMap<String, String>();
  61. InputStream in=new ByteArrayInputStream(result.getBytes());


易优小程序(企业版)+灵活api+前后代码开源 码云仓库:starfork
本文地址:https://www.eyoucms.com/wxmini/doc/course/23596.html 复制链接 如需定制请联系易优客服咨询:800182392 点击咨询
QQ在线咨询