小程序模板網(wǎng)

微信小程序開發(fā)我遇到的一些坑和建議:智能客服的實現(xiàn)提醒的實現(xiàn),支付實

發(fā)布時間:2018-02-01 18:25 所屬欄目:小程序開發(fā)教程

小程序最近火了,所以我也花點時間研究了下,同時自己也練練手做了一個小程序“商務(wù)工作記事冊”,在微信小程序里可以被搜索到,接下去我講講我開發(fā)過程中遇到的一些坑吧,主要針對后臺。

主要功能:

  • 支付接口調(diào)測:點擊支持我們,可以直接捐贈;
  • 提醒功能:主要使用客服通知以及微信小卡片通知;
  • 自定義賬本字段:主要就各種Event的Tag可以擴展字段;
  • 文件上傳下載:支持事件上傳圖片,錄音文件;

首先要做到上面這些,后臺必須要從小程序平臺得到的信息如下圖:

準(zhǔn)備工作就緒,講講我開發(fā)這個小程序遇到的一些問題以及相應(yīng)實現(xiàn)吧

 

前端問題

  • 高度不能用rpx,不然無法計算以及自適應(yīng),所以我后來改成了px,不知道有沒有更好的方案;
  • 首頁應(yīng)該要驗證token合法性,要去服務(wù)器請求驗證,這個過程是異步的,所以在載入首頁之前應(yīng)該有個splash過渡窗口引導(dǎo),不然進(jìn)入首頁token非法的就將無法請求到數(shù)據(jù),不知道有沒有更好的方案;
  • 排版布局使用的是weui,不知道還有沒有更好的wxss可以使用;
  • 由于異步調(diào)用多會亂,所以后來引入的Promise,好很多;
 

后臺問題

支付實現(xiàn); 
支付微信為了安全性,增加了數(shù)字簽名,首先你要發(fā)起一個訂單,得到訂單號,有了這個訂單號,就可以啟動微信支付功能了,以下是代碼:

 

  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;//用戶標(biāo)識
  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. // 把請求參數(shù)打包成數(shù)組
  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. // 除去數(shù)組中的空值和簽名參數(shù)
  49. Map<String, String> sPara = PayUtil.paraFilter(sParaTemp);
  50. String prestr = PayUtil.createLinkString(sPara); // 把數(shù)組所有元素,按照“參數(shù)=參數(shù)值”的模式用“&”字符拼接成字符串
  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());
  62.  


易優(yōu)小程序(企業(yè)版)+靈活api+前后代碼開源 碼云倉庫:starfork
本文地址:http://22321a.com/wxmini/doc/course/21396.html 復(fù)制鏈接 如需定制請聯(lián)系易優(yōu)客服咨詢:800182392 點擊咨詢
QQ在線咨詢