醫(yī)療項目尚醫(yī)通筆記01教案day17支付_第1頁
醫(yī)療項目尚醫(yī)通筆記01教案day17支付_第2頁
醫(yī)療項目尚醫(yī)通筆記01教案day17支付_第3頁
醫(yī)療項目尚醫(yī)通筆記01教案day17支付_第4頁
醫(yī)療項目尚醫(yī)通筆記01教案day17支付_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

一 支付介掃碼支付是商戶系統(tǒng)按支付協(xié)議生成支付,用戶再用“掃一掃”完成支付的模式。該模式適用于PC支付、實體店單品或訂單支付、支付請根據(jù)類型選擇以下主體:工商戶|企業(yè)/公司|||其他類 APIXML方式發(fā)送(POST)給支付接口(URL),支支付開檔: sign:數(shù)字簽名,根據(jù) 提供的密鑰和一套算法生成的一個加密信息,就是為了保證的安全性 WXPayUtil.WXPayUtil.generateSignedXml(param,二 支付開1、api 線下:家樂福超市、7-11便利店、上品折扣線下店等 模式二:商戶系統(tǒng)調(diào)用支付【統(tǒng)一下單API】生成預(yù)付,將接口返回的生成,用戶掃碼后輸入完成支付。注意:該模式的預(yù)付單有效期為2小時,過期后無法支付。xml發(fā)送請求spring.redis.database=0#商戶keypublicclassConstantPropertiesUtilsimplementsInitializingBeanprivateStringappid;privateStringpartner;privateStringpartnerkey;publicstaticStringAPPID;publicstaticStringPARTNER;publicstaticStringPARTNERKEY;publicvoidafterPropertiesSet()throwsExceptionAPPID=PARTNER=}}importorg.apache.http.Consts;importorg.apache.http.HttpEntity;importorg.apache.http.NameValuePair;importorg.apache.http. importorg.apache.http. importorg.apache.http. importorg.apache.http.conn.ssl.SSLConnectionSocketFactory;importorg.apache.http.conn.ssl.SSLContextBuilder;importorg.apache.http.conn.ssl.TrustStrategy;importorg.apache.http.entity.StringEntity;import importorg.apache.http.impl. importorg.apache.ht importorg.apache.http.ssl.SSLContexts;.ssl.SSLContext;importjava.io.File;importjava.io.FileInputStream;importjava.io.IOException;importjava.security.KeyStore;importjava.security.cert. importjava.security.cert.X509 importjava.text.ParseException;importjava.util.HashMap;importjava.util.LinkedList;importjava.util.List;importjava.util.Map;publicclassHttp privateStringurl;privateMap<String,String>param;privateintstatusCode;privateStringcontent;privateStringxmlParam;privatebooleanprivatebooleanisCert= privateStringcertPassword;publicbooleanisHttps(){return}publicvoidsetHttps(booleanisHttps){this.isHttps=isHttps;}publicbooleanisCert(){returnisCert;}publicvoidsetCert(booleancert){isCert=cert;}publicStringgetXmlParam(){returnxmlParam;}publicvoidsetXmlParam(StringxmlParam){this.xmlParam=xmlParam;}publicHttp (Stringurl,Map<String,String>param){this.url=url;this.param=}publicHttp (Stringurl){this.url=}publicStringgetCertPreturncertPassword;}publicvoidsetCertPassword(Strinthis.certPassword=certPassword;}publicvoidsetParameter(Map<String,String>param=map;}publicvoidaddParameter(Stringkey,Strinif(param==null)param=newHashMap<String,Stparam.put(key,value);}publicvoidpost()HttpPosthttp=newHttpPost(url);}publicvoidput()throws ProtocolException,IOException{HttpPuthttp=newHttpPut(url);}publicvoidget()throws ProtocolException,IOException{if(param!=null){StringBuilderurl=newStringBuilder(this.url);booleanisFirst=true;for(Stringkey:param.keySet()){if(isFirst)}this.url=}HttpGethttp=newHttpGet(url);}*sethttppost,putprivatevoidsetEntity(HttpEntityEnclosingRequestBasehttp){if(param!=null){List<NameValuePair>nvps=newfor(Stringkey: ameValuePair(key,param.get(key)));http.setEntity(newUrlEncodedFormEntity(nvps,Consts.UTF_8));//設(shè)置}if(xmlParam!=null)http.setEntity(newStringEntity(xmlParam,}}privatevoidexecute(HttpUriRequesthttp)throws IOException{ =null;try{if(isHttps){if(isCert) KeyStorekeystore=KeyStore.getInstance("PKCS12");char[]partnerId2charArray=certPassword.toCharArray();keystore.load(inputStream,partnerId2charArray); SSLContexts.custom().loadKeyMaterial(keystore,partnerId2charArray).build();SSLConnectionSocketFactorysslsfnewSSLConnectionSocketFactory(sslContext,newString[]{"TLSv1"}, }elseSSLContextsslContext=new.loadTrustMaterial(null,newTrustStrategy()publicboolean []String Exception{returntrue;} = }}else = }CloseableHttpResponseresponse=http try{ifif(response!=null)if(response.getStatusLine()!=statusCode=response.getStatusLine().getStatusCode();HttpEntityentity=response.getEntity();content=EntityUtils.toString(entity,}}finally{}}catch(Exceptione){}finally }}publicintgetStatusCode(){returnstatusCode;}publicStringgetContent()throwsParseException,IOException{returncontent;}}publicpublicinterfacePaymentInfoMapperextendsBaseMapper<PaymentInfo>}publicpublicinterfacePaymentServiceextendsIService<PaymentInfo> voidsavePaymentInfo(OrderInfoorder,Integer}publicclassPaymentServiceImplServiceImpl<PaymentInfoMapper,PaymentInfo>implements{ publicvoidsavePaymentInfo(OrderInfoorderInfo,IntegerpaymentType){QueryWrapper<PaymentInfo>queryWrapper=newQueryWrapper<>();queryWrapper.eq("order_id",orderInfo.getId());queryWrapper.eq("payment_type",paymentType);Integercount=baseMapper.selectCount(queryWrapper);if(count>0)return; PaymentInfopaymentInfo=newPaymentInfo();paymentInfo.setCreateTime(newDate()); }}publicpublicinterfaceWeixinServiceMapcreateNative(Long}publicclassWeixinServiceImplimplementsWeixinServiceprivateOrderServiceorderService;privatePaymentServicepaymentService;private te publicMapcreateNative(LongorderId){try{ if(null!=payMap)returnOrderInfoorder=//保 Map p=new p.put("appid",ConstantPropertiesUtils.APPID); p.put("nonce_str",Stringbody=order.get ate()+"就診"+order.getDepname(); p.put("body",body); p.put("out_trade_no", p.put("total_fee", p.put("spbill_create_ip",""); p.put("trade_type", Stringxml Map<String,String>resultMap=Mapmap=newmap.put(map.put("orderId",map.put("totalFee",order.getAmount());map.put("resultCode",resultMap.get("result_code"));map.put("codeUrl",resultMap.get("code_url"));if(null!=resultMap.get("result_code")){ }returnte.opsForValue().set(orderId.toString(),map,}catch(Exceptione)returnnewHashMap<>();}}} publicclassWeixinController{privateWeixinService*publicResultcreateNative(@ApiParam(name"orderId"valueid"requiredtrue)@PathVariable("orderId")LongorderId){return}}apicreateNative(orderId)createNative(orderId){returnrequest({url:method:npminstallvue-importimportVueQriouslyfrom'vue-qriously' <!--header--<divclass="nav-<!--左側(cè)導(dǎo)航#start<divclass="navleft-<divclass="nav-item<spanlinkclickabledark"onclick="javascript:window.location='/user'">實名認(rèn)證<divclass="nav-item<spanlinkselecteddark"訂單<divclass="nav-item<spanlinkclickabledark"onclick="javascript:window.location='/patient'">診人管理<divclass="nav-item<spanclass="v-linkclickabledark修改賬號信息<divclass="nav-item<spanclass="v-linkclickabledark意見反饋左側(cè)導(dǎo)航#end右側(cè)內(nèi)容#start<divclass="<divclass="order-<div 詳情<divclass="status-<divclass="left-<divclass="status-wrapper<span</span>{{orderInfo.param.orderStatusString<divclass="right-<imgsrc=" g"class="code-img"><divclass="content- <span </span關(guān)注預(yù)約掛號

<divclass="watch-wrapper">快 ,輕松就醫(yī)<divclass="info-<divclass="title-<div 信息<divclass="info-<el-formref="form"<el-form-itemlabel="<divclass="content"><span>{{orderInfo.patientName

<el-form-itemlabel="<divclass="content"><span>{{ ateorderInfo.reserveTime0上午下午<el-form-itemlabel="<divclass="content"><span>{{orderInfo.hosname}}

<el-form-itemlabel="<divclass="content"><span>{{orderInfo.depname}}<el-form-itemlabel="醫(yī) <divclass="content"><span>{{orderInfo.title}}<el-form-itemlabel="<div<divclass="fee">{orderInfo.amount<el-form-item <divclass="content"><span>{{orderInfo.outTradeNo}}<el-form-item <divclass="content"><span>{{orderInfo.createTime<divclass="rule-wrapper<divclass="rule-title注意事項>1、請確認(rèn)就診人信息是否準(zhǔn)確,若填寫錯誤將無法取號就診,損失由本人承擔(dān);<spanstyle="color:red">2、【取號】就診當(dāng)天需在orderInfo.fetchTime在醫(yī)院取號,未取號視為爽約,該號不退不換;3、【退號】在{{orderInfo.quitTime}}前可 退號,逾期將不可 社??ㄔ谄脚_預(yù) 。請于就診當(dāng)日,攜帶預(yù) 所使用的有 件到院 市醫(yī)?;颊咴谧≡浩陂g不能使用社??ㄔ陂T診取號<divclass="bottom-wrappermt60"v-if="orderInfo.orderStatus==0||orderInfo.orderStatus==1"><divclass="button-<divclass="v-buttonwhite"@click="cancelOrder()取消預(yù)約

<divclass="button-wrapperml20"if="orderInfo.orderStatus==<divclass="v-button"@click="pay()">支付</div>右側(cè)內(nèi)容#end 支付彈出框<el-dialog:visible.sync="dialogPayVisible"align:left":append-to-body="true"width="500px"<div<divclass="operate-view"style="height:<divclass="wrapper<qriously:value="payObj.codeUrl"<divstyle="text-align:center;line-height:25px;margin-bottom:40px;">請使 掃一掃掃 支</div><!--footer-- import'~/assets/css/hospital_ import'~/assets/css/hospital.css'importorderInfoApifrom'@/api/orderInfo'importweixinApifrom'@/api/weixin'exportdefault{data(){return{orderId:null,orderInfo:{param:dialogPayVisible:false,payObj:{},timer:null}created()this.orderId=this.$route.query.orderIdmethods:{init()orderInfoApi.getOrders(this.orderId).then(response=>{this.orderInfo=pay()this.dialogPayVisible=trueweixinApi.createNative(this.orderId).then(response=>{this.payObj=response.dataif(this.payObj.codeUrl=='')this.dialogPayVisible=false}elsethis.timer=setInterval(()=>{},}queryPayStatus(orderId){weixinApi.queryPayStatus(orderId).then(response=>{if(response.message支付中}closeDialog(){if(this.timer){}}}}.info-wrapper{padding-left:0;padding-top:padding-top:}.content-wrapper{color:#333;font-size:14px;padding-bottom:}.bottom-wrapper{width:100%;}.button-wrapper{margin:0;}.el-form-item{margin-bottom:5px;}.bottom-wrapper.button-wrapper{margin-top:0;}queryPayStatus(orderId)queryPayStatus(orderId){returnrequest({url:`/api/order/weixin/queryPayStatus/${orderId}`,method:'get'第MapqueryPayStatus(LongorderId,StringpublicMapqueryPayStatus(LongorderId,StringpaymentType){try{OrderInfoorderInfo=Map p=new p.put("appid",ConstantPropertiesUtils.APPID); p.put("out_trade_no",orderInfo.getOutTradeNo()); p.put("nonce_str",= Stringxml Map<String,String>resultMap=return}catch(Exceptione){returnnull;}}@ApiOperation(value=@ApiOperation(value="查詢支付狀態(tài)") publicResultqueryPayStatus(@ApiParam(name"orderId"valueid"requiredtrue)@PathVariable("orderId")LongorderId){Map<String,String>resultMap=weixinPayService.queryPayStatus(orderId,if(resultMapnull}Stringout_trade_no=resultMap.get("out_trade_no");returnResult.ok().message("支付成功");}returnResult.ok().message(}privatePaymentServicevoidpaySuccess(StringoutTradeNo,IntegerpaymentType,Map<String,String> Map<String,String> p)PaymentInfopaymentInfo=this.getPaymentInfo(outTradeNo,paymentType);if(null==paymentInfo){thrownew}if(paymentInfo.getPaymentStatus()!={}}

PaymentInfopaymentInfoUpd=newPaymentInfo(); paymentInfoUpd.setCallbackTime(newDate()); this.updatePaymentInfo(outTradeNo,paymentInfoUpd);OrderInfoorderInfo=orderService.getById(paymentInfo.getOrderId());privatePaymentInfogetPaymentInfo(StringoutTradeNo,IntegerpaymentType){QueryWrapper<PaymentInfo>queryWrapper=newQueryWrapper<>();queryWrapper.eq("out_trade_no",outTradeNo);queryWrapper.eq("payment_type",paymentType);return}privatevoidupdatePaymentInfo(StringoutTradeNo,PaymentInfopaymentInfoUpd){QueryWrapper<PaymentInfo>queryWrapper=newQueryWrapper<>();queryWrapper.eq("out_trade_no",outTradeNo);baseMapper.update(paymentInfoUpd,queryWrapper);} Map<String,String> p)PaymentInfopaymentInfo=this.getPaymentInfo(outTradeNo,paymentType);if(null==paymentInfo){thrownew}if(paymentInfo.getPaymentStatus()!={}PaymentInfopaymentInfoUpd=newPaymentInfo(); paymentInfoUpd.setCallbackTime(newDate()); this.updatePaymentInfo(outTradeNo,paymentInfoUpd);OrderInfoorderInfo=orderService.getById(paymentInfo.getOrderId());SignInfoVo=hospitalFeign if(null==signInfoVo){thrownew}Map<String,Object>reqMap=newHashMap<>();Stringsign=HttpRequestHelper.getSign(reqMap,signInfoVo.getSignKey());reqMap.put("sign",sign); if(result.getInteger("code")!=200) }} 請的放在service-order模塊/resources/cert文件夾下在perties文件配置路徑PaymentInfogetPaymentInfo(LongorderId,IntegerpublicPaymentInfogetPaymentInfo(LongorderId,IntegerpaymentType){QueryWrapper<PaymentInfo>queryWrapper=newQueryWrapper<>();queryWrapper.eq("order_id",orderId);queryWrapper.eq("payment_type",paymentType);return}2.3.1publicpublicinterfaceRefundInfoMapperextendsBaseMapper<RefundInfo>}.2servicepublicpublicinterfaceRefundInfoServiceextendsIService<RefundInfo>RefundInfosaveRefundInfo(PaymentInfo} RefundInfo>implementsRefundInfoService{privateRefundInfoMapperpublicRefundInfosaveRefundInfo(PaymentInfopaymentInfo){QueryWrapper<RefundInfo>queryWrapper=newQueryWrapper<>();queryWrapper.eq("order_id",paymentInfo.getOrderId());queryWrapper.eq("payment_type",paymentInfo.getPaymentType());RefundInforefundInfo=refundInfoMapper.selectOne(queryWrapper);if(null!=refundInfo)returnrefundInfo; refundInfo=newRefundInfo();refundInfo.setCreateTime(newDate());return}}Booleanrefund(LongpublicBooleanrefund(LongorderId){try{=paymentService.getPaymentInfo(orderId,= RefundStatusEnum.REFUND.getStatus().intValue()){return}Map<String,String> p=new 號 //商戶編號 p.put("transaction_id",paymentInfoQuery.getTradeNo()); p.put("out_refund_no","tk"+paymentInfoQuery.getOutTradeNo());//商戶退 = StringxmlMap<String,String>resultMap= refundInfo.setCallbackTime(newDate());returntrue;}return}catch(Exceptione){}return}BooleancancelOrder(LongpublicBooleancancelOrder(LongorderId){OrderInfoorderInfo=this.getById(orderId);DateTimequitTime=newDateTime(orderInfo.getQuitTime());if(quitTime.isBeforeNow()){thrownew}=if(nu

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論