java实现微信支付功能
微信支付的具体实现方法,供大家参考,具体内容如下
工具类(用于在微信支付服务后台生成预支付交易单)
packagecom.fengdi.lianmeng.zhifu.weixin; importcom.fengdi.lianmeng.util.MD5; importjava.lang.reflect.Field; importjava.util.HashMap; importjava.util.Map; /** * *类说明:除被扫支付场景以外,店铺系统先调用该接口在微信支付服务后台生成预支付交易单, *返回正确的预支付交易回话标识后再按扫码、JSAPI、APP等不同场景生成交易串调起支付。 *@author聂枫 *2016年1月8日上午11:33:21 */ publicclassUnifiedorderReq{ /** *公众账号ID */ privateStringappid; /** *店铺号 */ privateStringmch_id; /** *设备号 */ privateStringdevice_info; /** *随机字符串 */ privateStringnonce_str; /** *签名 */ privateStringsign; /** *商品描述 */ privateStringbody; /** *商品详情 */ privateStringdetail; /** *附加数据 */ privateStringattach; /** *店铺订单号 */ privateStringout_trade_no; /** *货币类型 */ privateStringfee_type; /** *总金额 */ privateIntegertotal_fee; /** *终端IP */ privateStringspbill_create_ip; /** *交易起始时间 */ privateStringtime_start; /** *交易结束时间 */ privateStringtime_expire; /** *商品标记 */ privateStringgoods_tag; /** *通知地址 */ privateStringnotify_url; /** *交易类型 */ privateStringtrade_type; /** *商品ID */ privateStringproduct_id; /** *指定支付方式 */ privateStringlimit_pay; /** *用户标识 */ privateStringopenid; publicStringgetAppid(){ returnappid; } publicvoidsetAppid(Stringappid){ this.appid=appid; } publicStringgetMch_id(){ returnmch_id; } publicvoidsetMch_id(Stringmch_id){ this.mch_id=mch_id; } publicStringgetDevice_info(){ returndevice_info; } publicvoidsetDevice_info(Stringdevice_info){ this.device_info=device_info; } publicStringgetNonce_str(){ returnnonce_str; } publicvoidsetNonce_str(Stringnonce_str){ this.nonce_str=nonce_str; } publicStringgetSign(){ returnsign; } publicvoidsetSign(Stringsign){ this.sign=sign; } publicStringgetBody(){ returnbody; } publicvoidsetBody(Stringbody){ this.body=body.length()>40?body.substring(0,40):body; } publicStringgetDetail(){ returndetail; } publicvoidsetDetail(Stringdetail){ this.detail=detail; } publicStringgetAttach(){ returnattach; } publicvoidsetAttach(Stringattach){ this.attach=attach; } publicStringgetOut_trade_no(){ returnout_trade_no; } publicvoidsetOut_trade_no(Stringout_trade_no){ this.out_trade_no=out_trade_no; } publicStringgetFee_type(){ returnfee_type; } publicvoidsetFee_type(Stringfee_type){ this.fee_type=fee_type; } publicIntegergetTotal_fee(){ returntotal_fee; } publicvoidsetTotal_fee(Integertotal_fee){ this.total_fee=total_fee; } publicStringgetSpbill_create_ip(){ returnspbill_create_ip; } publicvoidsetSpbill_create_ip(Stringspbill_create_ip){ this.spbill_create_ip=spbill_create_ip; } publicStringgetTime_start(){ returntime_start; } publicvoidsetTime_start(Stringtime_start){ this.time_start=time_start; } publicStringgetTime_expire(){ returntime_expire; } publicvoidsetTime_expire(Stringtime_expire){ this.time_expire=time_expire; } publicStringgetGoods_tag(){ returngoods_tag; } publicvoidsetGoods_tag(Stringgoods_tag){ this.goods_tag=goods_tag; } publicStringgetNotify_url(){ returnnotify_url; } publicvoidsetNotify_url(Stringnotify_url){ this.notify_url=notify_url; } publicStringgetTrade_type(){ returntrade_type; } publicvoidsetTrade_type(Stringtrade_type){ this.trade_type=trade_type; } publicStringgetProduct_id(){ returnproduct_id; } publicvoidsetProduct_id(Stringproduct_id){ this.product_id=product_id; } publicStringgetLimit_pay(){ returnlimit_pay; } publicvoidsetLimit_pay(Stringlimit_pay){ this.limit_pay=limit_pay; } publicStringgetOpenid(){ returnopenid; } publicvoidsetOpenid(Stringopenid){ this.openid=openid; } @Override publicStringtoString(){ StringBuilderbuilder=newStringBuilder(); builder.append("UnifiedorderReq[appid="); builder.append(appid); builder.append(",mch_id="); builder.append(mch_id); builder.append(",device_info="); builder.append(device_info); builder.append(",nonce_str="); builder.append(nonce_str); builder.append(",sign="); builder.append(sign); builder.append(",body="); builder.append(body); builder.append(",detail="); builder.append(detail); builder.append(",attach="); builder.append(attach); builder.append(",out_trade_no="); builder.append(out_trade_no); builder.append(",fee_type="); builder.append(fee_type); builder.append(",total_fee="); builder.append(total_fee); builder.append(",spbill_create_ip="); builder.append(spbill_create_ip); builder.append(",time_start="); builder.append(time_start); builder.append(",time_expire="); builder.append(time_expire); builder.append(",goods_tag="); builder.append(goods_tag); builder.append(",notify_url="); builder.append(notify_url); builder.append(",trade_type="); builder.append(trade_type); builder.append(",product_id="); builder.append(product_id); builder.append(",limit_pay="); builder.append(limit_pay); builder.append(",openid="); builder.append(openid); builder.append("]"); returnbuilder.toString(); } publicStringtoSignString(){ Class>clz=this.getClass(); Field[]fields=clz.getDeclaredFields(); StringBuilderbuilder=newStringBuilder(); for(Fieldfield:fields){ builder.append(field.getName()); } returnbuilder.toString(); } publicStringsignString(){ StringBuilderbuilder=newStringBuilder(); builder.append("appid="+appid); if(attach!=null){ builder.append("&attach="+attach); } builder.append("&body="+body); builder.append("&mch_id="+mch_id); builder.append("&nonce_str="+nonce_str); builder.append("¬ify_url="+notify_url); if(!trade_type.equals("APP")){ builder.append("&openid="+openid); } builder.append("&out_trade_no="+out_trade_no); builder.append("&spbill_create_ip="+spbill_create_ip); builder.append("&total_fee="+total_fee); builder.append("&trade_type="+trade_type); builder.append("&key="+FgWxConfig.mobilekey); returnbuilder.toString(); } publicStringwapSignString(){ StringBuilderbuilder=newStringBuilder(); builder.append("appid="+appid); if(attach!=null){ builder.append("&attach="+attach); } builder.append("&body="+body); builder.append("&mch_id="+mch_id); builder.append("&nonce_str="+nonce_str); builder.append("¬ify_url="+notify_url); if(!trade_type.equals("APP")){ builder.append("&openid="+openid); } builder.append("&out_trade_no="+out_trade_no); builder.append("&spbill_create_ip="+spbill_create_ip); builder.append("&total_fee="+total_fee); builder.append("&trade_type="+trade_type); builder.append("&key="+FgWxConfig.key); returnbuilder.toString(); } publicStringtoXml(){ return""+ " "; } publicStringtoWapXml(){ return""+appid+" "+ (attach!=null?""+attach+" ":"")+ ""+body+""+ ""+mch_id+" "+ ""+nonce_str+" "+ ""+notify_url+" "+ (trade_type.equals("APP")==true?"":""+openid+" ")+ ""+out_trade_no+" "+ ""+spbill_create_ip+" "+ ""+total_fee+" "+ ""+trade_type+" "+ ""+MD5.encryptByMD5(signString()).toUpperCase()+" "+ ""+ " "; } /*支付查询签名字符串*/ publicStringsignQueryString(Stringtransaction_id){ StringBuilderbuilder=newStringBuilder(); builder.append("appid="+appid); builder.append("&body="+body); builder.append("&mch_id="+mch_id); builder.append("&nonce_str="+nonce_str); builder.append("&transaction_id="+transaction_id); builder.append("&key="+FgWxConfig.mobilekey); returnbuilder.toString(); } /*支付查询*/ publicStringtoQueryXml(Stringtransaction_id){ StringBuildersBuilder=newStringBuilder(); sBuilder.append(""+appid+" "+ (attach!=null?""+attach+" ":"")+ ""+body+""+ ""+mch_id+" "+ ""+nonce_str+" "+ ""+notify_url+" "+ (trade_type.equals("APP")==true?"":""+openid+" ")+ ""+out_trade_no+" "+ ""+spbill_create_ip+" "+ ""+total_fee+" "+ ""+trade_type+" "+ ""+MD5.encryptByMD5(wapSignString()).toUpperCase()+" "+ ""); sBuilder.append(" "); returnsBuilder.toString(); } publicMap"+appid+" "); sBuilder.append(""+body+""); sBuilder.append(""+mch_id+" "); sBuilder.append(""+nonce_str+" "); sBuilder.append(""+transaction_id+" "); sBuilder.append(""+MD5.encryptByMD5(signQueryString(transaction_id)).toUpperCase()+" "); sBuilder.append("toMap(){ Map params=newHashMap (); params.put("appid",appid); if(attach!=null){ params.put("attach",attach); } params.put("body",body); params.put("mch_id",mch_id); params.put("nonce_str",nonce_str); params.put("notify_url",notify_url); if(!trade_type.equals("APP")){ params.put("openid",openid); } params.put("out_trade_no",out_trade_no); params.put("spbill_create_ip",spbill_create_ip); params.put("total_fee",total_fee); params.put("trade_type",trade_type); params.put("sign",MD5.encryptByMD5(signString()).toUpperCase()); returnparams; }
组装工具类数据
privateAppWeixinPayResponseappUnifiedorderReq(Orderorder,Membermember,HttpServletRequestrequest){ //获取支付参数 UnifiedorderRequnifiedorderReq=newUnifiedorderReq(); unifiedorderReq.setBody(order.getOrderName().length()>50?order.getOrderName().substring(0,50):order.getOrderName()); log.error(unifiedorderReq.getBody().length()+"--"+unifiedorderReq.getBody()); unifiedorderReq.setAttach(order.getOrderNo()); unifiedorderReq.setTotal_fee(order.getRealAmt().intValue()); unifiedorderReq.setTrade_type("APP");//此处可修改为JSAPI unifiedorderReq.setOut_trade_no(order.getOrderNo()+RandomUtils.nextInt(100,1000)); unifiedorderReq.setSpbill_create_ip(getIpAddr(request)); unifiedorderReq.setOpenid(member.getOpenid()); returnpayService.appUnifiedorderReq(unifiedorderReq,PayCategory.order.toString()); }
微信统一下单
publicAppWeixinPayResponseappUnifiedorderReq(UnifiedorderRequnifiedorderReq,StringpayCategory) throwsFdServiceException{ unifiedorderReq.setAppid(FgWxConfig.appid_app); unifiedorderReq.setMch_id(FgWxConfig.mchId); unifiedorderReq.setNonce_str(Random2Utils.generateString(20)); if(payCategory.equals(PayCategory.order.toString())){ unifiedorderReq.setNotify_url(fgProperties.getDomainUrl()+FgWxConfig.weixinOrderNotifyCallBack); }elseif(payCategory.equals(PayCategory.recharge.toString())){ unifiedorderReq.setNotify_url(fgProperties.getDomainUrl()+FgWxConfig.weixinRechargeNotifyCallBack); }else{ thrownewFdServiceException(ErrorCode.ILLEGAL_ARGUMENT,"微信参数类型["+payCategory+"]异常"); } unifiedorderReq.setSign(MD5.encryptByMD5(unifiedorderReq.wapSignString()).toUpperCase()); logger.info("unifiedorder返回数据unifiedorderReq:"+unifiedorderReq); Stringunifiedorder=FgHttp.sendPost(FgWxConfig.unifiedorderUrl,unifiedorderReq.toWapXml()); logger.info("unifiedorder返回数据unifiedorder:"+unifiedorder); AppWeixinPayResponseappWeixinPayResponse=newAppWeixinPayResponse(); try{ Mapmap=XmlHelper.parseResXML(unifiedorder); if("SUCCESS".equals(map.get("return_code"))&&"SUCCESS".equals(map.get("result_code"))){ logger.info("微信统一下单返回成功:"+map); appWeixinPayResponse.setAppid(FgWxConfig.appid_app); appWeixinPayResponse.setNoncestr((String)map.get("nonce_str")); appWeixinPayResponse.setPartnerid(FgWxConfig.mchId); appWeixinPayResponse.setPrepayid((String)map.get("prepay_id")); appWeixinPayResponse.setTimestamp((System.currentTimeMillis()+"").substring(0,10)); appWeixinPayResponse.setSign(MD5.encryptByMD5(appWeixinPayResponse.wapSignString()).toUpperCase()); }else{ logger.info("微信统一下单返回失败:"+map); thrownewFdServiceException(ErrorCode.ILLEGAL_ARGUMENT,"微信统一下单返回失败:"+map.get("return_msg")); } }catch(IOExceptione){ e.printStackTrace(); }catch(ParserConfigurationExceptione){ e.printStackTrace(); }catch(SAXExceptione){ e.printStackTrace(); } returnappWeixinPayResponse;//直接将参数返回给前端,发起支付 }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。