小程序支付说明1.此案例用作小程序缴费的情况。过程为:先触发微信小程序支付后台得到预付款ID(prepare_id),然后小程序前台会自动弹出一个对应金额的支付窗口,然后用户输入正确密码,支付成功,触发用户的回调函数做业务操作。
2.更多分布式微服务课程关注:www.majiaxueyuan.com
3.得到微信的code。小程序和公众号都可以直接得到
AccessToken获取方法(顺便写的)BodyStringgetAccessToken(Stringcode){CloseableHttpClienthttpClient=HttpClients.createDefault();Stringurl="https://api.weixin.qq.com/sns/jscode2session?appid="+WxPayConfig.APP_ID+"&secret="+WxPayConfig.APP_SECRET+"&js_code="+code+"&grant_type=authorization_code";//创建一个GET对象try{HttpGetget=newHttpGet(url);//执行请求CloseableHttpResponseresponse=httpClient.execute(get);HttpEntityentity=response.getEntity();Stringstring=EntityUtils.toString(entity,"utf-8");System.out.println(string);returnnewBodyString().setSuccess(string);}catch(Exceptione){returnnewBodyString().setError("登录异常");}}微信支付配置文件publicclassWxPayConfig{//小程序appidpublicstaticfinalStringAPP_ID="";//APP——SecretpublicstaticfinalStringAPP_SECRET="";//微信支付的商户号publicstaticfinalStringMCH_ID="";//微信支付的商户秘钥publicstaticfinalStringKEY="";//支付成功后的服务器回调urlpublicstaticfinalStringnotify_url="";//签名方式,固定值publicstaticfinalStringSIGNTYPE="MD5";//交易类型,小程序支付的固定值为JSAPIpublicstaticfinalStringTRADETYPE="JSAPI";//微信统一下单接口地址publicstaticfinalStringpay_url="https://api.mch.weixin.qq.com/pay/unifiedorder";//微信直接转账到个人请求publicstaticfinalStringtransfor_url="https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers";publicstaticfinalStringSTATIC_NUM="a0A0b1B2c1C3d2D1e3E2f4F3g5G7h4H6i5Ij4J9k5K6l6Lm7M7n8N8o9Op0PqQrRsStTuUv9VwWxXy8YzZ";}预付款ID4.微信支付分为两步,第一步可以理解为获得一个预付款ID
/***微信支付获取预付款信息返回给小程序唤起支付界面*@paramunique:系统订单号*@paramopenId:用户唯一OpenId*@paramtotleMoney:付款金额,字符串(单位:分)*@paramipAddr:IP地址*@return*/publicBodyStringwxPay(Stringunique,StringopenId,StringtotleMoney,StringipAddr){//付款金额try{//生成的随机字符串Stringnonce_str=getRandomStringByLength(32);//获取客户端的ip地址Stringspbill_create_ip=ipAddr;//商品名称Stringbody="码家学院永久会员会员充值";//组装参数,用户生成统一下单接口的签名MapString,StringpackageParams=newHashMapString,String();packageParams.put("appid",WxPayConfig.APP_ID);packageParams.put("body",body);packageParams.put("mch_id",WxPayConfig.MCH_ID);packageParams.put("nonce_str",nonce_str);packageParams.put("notify_url",WxPayConfig.notify_url);//支付成功后的回调地址packageParams.put("openid",openId);packageParams.put("out_trade_no",unique);//商户订单号packageParams.put("spbill_create_ip",spbill_create_ip);packageParams.put("total_fee",totleMoney);//支付金额,这边需要转成字符串类型,否则后面的签名会失败packageParams.put("trade_type",WxPayConfig.TRADETYPE);//支付方式Stringprestr=PayUtil.createLinkString(packageParams);////MD5运算生成签名,这里是第一次签名,用于调用统一下单接口Stringmysign=PayUtil.sign(prestr,WxPayConfig.KEY,"utf-8").toUpperCase();//拼接统一下单接口使用的xml数据,要将上一步生成的签名一起拼接进去Stringxml="xml"+"appid"+WxPayConfig.APP_ID+"/appid"+"body![CDATA["+body+"]]/body"+"mch_id"+WxPayConfig.MCH_ID+"/mch_id"+"nonce_str"+nonce_str+"/nonce_str"+"notify_url"+WxPayConfig.notify_url+"/notify_url"+"openid"+openId+"/openid"+"out_trade_no"+unique+"/out_trade_no"+"spbill_create_ip"+spbill_create_ip+"/spbill_create_ip"+"total_fee"+totleMoney+"/total_fee"+"trade_type"+WxPayConfig.TRADETYPE+"/trade_type"+"sign"+mysign+"/sign"+"/xml";System.out.println("调试模式_统一下单接口请求XML数据:"+xml);//调用统一下单接口,并接受返回的结果Stringresult=PayUtil.httpRequest(WxPayConfig.pay_url,"POST",xml);System.out.println("调试模式_统一下单接口返回XML数据:"+result);//将解析结果存储在HashMap中Mapmap=PayUtil.doXMLParse(result);//返回状态码Stringreturn_code=(String)map.get("return_code");//返回给小程序端需要的参数MapString,Objectresponse=newHashMapString,Object();if(return_code=="SUCCESS"||return_code.equals(return_code)){//返回的预付单信息Stringprepay_id=(String)map.get("prepay_id");response.put("nonceStr",nonce_str);response.put("package","prepay_id="+prepay_id);LongtimeStamp=System.currentTimeMillis()/1000;response.put("timeStamp",timeStamp+"");//这边要将返回的时间戳转化成字符串,不然小程序端调用wx.requestPayment方法会报签名错误//拼接签名需要的参数StringstringSignTemp="appId="+WxPayConfig.APP_ID+"&nonceStr="+nonce_str+"&package=prepay_id="+prepay_id+"&signType=MD5&timeStamp="+timeStamp;//再次签名,这个签名用于小程序端调用wx.requesetPayment方法StringpaySign=PayUtil.sign(stringSignTemp,WxPayConfig.KEY,"utf-8").toUpperCase();response.put("paySign",paySign);}response.put("appid",WxPayConfig.APP_ID);Stringjson=JSON.toJSONString(response);returnnewBodyString().setSuccess(json);}catch(Exceptione){e.printStackTrace();}returnnull;}随机字符串生成方法publicstaticStringgetRandomStringByLength(intlength){Stringbase="abcdefghijklmnopqrstuvwxyz0123456789";Randomrandom=newRandom();StringBuffersb=newStringBuffer();for(inti=0;ilength;i++){intnumber=random.nextInt(base.length());sb.append(base.charAt(number));}returnsb.toString();}异步回调函数5.(用户处理我们自己系统中的逻辑)
publicvoidwxNotify(HttpServletRequestrequest,HttpServletResponseresponse){try{BufferedReaderbr=newBufferedReader(newInputStreamReader((ServletInputStream)request.getInputStream()));Stringline=null;StringBuildersb=newStringBuilder();while((line=br.readLine())!=null){sb.append(line);}br.close();//sb为微信返回的xmlStringnotityXml=sb.toString();StringresXml="";System.out.println("接收到的报文:"+notityXml);Mapmap=PayUtil.doXMLParse(notityXml);StringreturnCode=(String)map.get("return_code");if("SUCCESS".equals(returnCode)){//支付成功,需要根据订单号来判断此订单号在系统中是否已经被处理过了//这就是所说的幂等性的处理,避免我们的订单被交易多次//处理完成过后告诉微信处理成功,避免微信触发重试机制map.get("result_code");map.get("transaction_id");//告诉微信处理完成resXml="xml"+"return_code![CDATA[SUCCESS]]/return_code"+"return_msg![CDATA[OK]]/return_msg"+"/xml";}else{//告诉微信处理失败resXml="xml"+"return_code![CDATA[FAIL]]/return_code"+"return_msg![CDATA[报文为空]]/return_msg"+"/xml";}System.out.println("微信支付回调数据结束");BufferedOutputStreamout;out=newBufferedOutputStream(response.getOutputStream());out.write(resXml.getBytes());out.flush();out.close();}catch(Exceptione){e.printStackTrace();}}6.到这里小程序当中的微信支付就完成了,也是很简答的
微信小程序餐饮案例-微信小程序支付案例-微信小程序实例
浏览量:1949
时间:
来源:SoXiaTea
版权声明
即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。
最新资讯
-

即速应用,赋能企业玩转微信小程序智慧经营
作为国内领军的智慧商业经营服务商,即速应用始终秉承“让每个企业都拥有自己的智慧店铺”的愿景,持续赋能更多企业玩转智慧经营。即速应用旗下拥有“小程序搭建工具-即速应用”、“私域流量专家-即客云”等产品,帮助商家打通互联网全生态营销闭环。 -

即客云2.0重磅更新,让微信小程序运营更简单!
即客云作为一款基于企业微信的第三方工具,现从多维度提供超过30种功能,自上线以来,已服务多家企业,受到一致好评。近期,我们根据客户反馈和市场调研正式推出升级版 即客云2.0!更新了私域运营SOP,群日历功能,批量拓客,客户雷达,消息推送,个人欢迎语,帮助企业更好运用企业微信;同时提升了社群运营工作标准化,提升运营效率,帮助企业实现客户增长,玩转私域流量。 -

零代码 + AI 双轮驱动|即速应用解锁人工智能小程序开发新范式
无需代码、无需 AI 算法功底,普通人也能快速搭建智能小程序。即速应用将人工智能与零代码开发深度融合,推出 AI 智能生成能力,用户通过自然语言描述需求,AI 自动生成小程序页面、功能模块与后台配置,覆盖商城、预约、同城、社区团购等全场景。平台内置 AI 智能推荐、智能客服、用户画像分析等能力,一键对接微信生态,打通视频号、企业微信、短信跳转,帮企业快速落地 AI 应用,抢占智慧经营先机,让每家企业都拥有 AI 驱动的智慧店铺。












