前端开发可以做网站运营吗,现在办宽带多少钱一年,最新军事新闻军事最新新闻,建设银行官方网站云服务中心https://blog.csdn.net/u012552275/article/details/78320051 网上找了一个可以起吊支付宝的appdemo #xff0c;它集成了服务器端#xff0c;我先将其分离为app和服务器端#xff0c;保证app在接收参数后可以启调支付宝
#xff08;保证app这边是正确的 不然出错都不知道…https://blog.csdn.net/u012552275/article/details/78320051 网上找了一个可以起吊支付宝的appdemo 它集成了服务器端我先将其分离为app和服务器端保证app在接收参数后可以启调支付宝
保证app这边是正确的 不然出错都不知道是服务器出错还是app出错在
找网上资料修改服务器端做好app请求接口和支付宝的服务器回调接口RequestMapping(pay2.do)ResponseBodypublic Object pay2(String money){try{AlipayClient alipayClient new DefaultAlipayClient(https://openapi.alipaydev.com/gateway.do,PropertiesAlipayUtil.getProperty(appid),PropertiesAlipayUtil.getProperty(private_key),json,UTF-8,PropertiesAlipayUtil.getProperty(public_key),RSA2);AlipayTradeAppPayRequest request new AlipayTradeAppPayRequest();AlipayTradeAppPayModel model new AlipayTradeAppPayModel();model.setOutTradeNo(getOutTradeNo() );// 订单号。model.setTimeoutExpress(30m);// 设置未付款支付宝交易的超时时间一旦超时该笔交易就会自动被关闭。当用户进入支付宝收银台页面不包括登录页面会触发即刻创建支付宝交易此时开始计时。取值范围1m15d。m-分钟h-小时d-天1c-当天1c-当天的情况下无论交易何时创建都在0点关闭。// 该参数数值不接受小数点 如 1.5h可转换为 90m。model.setTotalAmount(0.01);// 订单总金额单位为元精确到小数点后两位取值范围[0.01,100000000]这里调试每次支付1分钱在项目上线前应将此处改为订单的总金额model.setProductCode(QUICK_MSECURITY_PAY);// 销售产品码商家和支付宝签约的产品码为固定值QUICK_MSECURITY_PAYrequest.setBizModel(model);request.setNotifyUrl(PropertiesUtil.getProperty(alipay.callback.url.app)); // 设置后台异步通知的地址在手机端支付成功后支付宝会通知后台手机端的真实支付结果依赖于此地址// 根据不同的产品model.setBody(body);// 对一笔交易的具体描述信息。如果是多种商品请将商品描述字符串累加传给body。model.setSubject(111商品的标题/交易标题/订单标题/订单关键字等);//break;// 这里和普通的接口调用不同使用的是sdkExecuteAlipayTradeAppPayResponse response alipayClient.sdkExecute(request);// 可以直接给客户端请求无需再做处理。
// orders.setAliPayOrderString(response.getBody());
// baseResult.setData(orders);Map map new HashMap();
// map.put(code,201);
// map.put(message,支付宝下单失败);map.put(orderString,response.getBody());return map;}catch (Exception e){e.printStackTrace();
// baseResult.setState(-999);
// baseResult.setMsg(程序异常!);
// baseResult.setSuccess(false);
// logger.error(e.getMessage());System.out.println(程序异常!);}return null;}RequestMapping(alipay_callback.do)ResponseBodypublic Object alipayCallback(HttpServletRequest request){System.out.println(alipay_callback 回调了request);//返回object 因为可能不止是字符串 这个要返回 alipay 按要求的格式返回//支付宝的回调会放到request中供 我们自己取 只要一个参数就好了//自己从新组装mapMapString, String params Maps.newHashMap();//支付宝将回调放request中是数组MapString, String[] parameterParams request.getParameterMap();for(Iterator iterator parameterParams.keySet().iterator(); iterator.hasNext();){String key (String) iterator.next();String[] values parameterParams.get(key);//支付宝将回调放request中是数组String valueStr ;for(int i 0; i values.length ; i){//遍历数组 拼接之后 1,2,3,4valueStr (i values.length -1)? valueStr values[i]: valueStr values[i],;}自己从新组装mapparams.put(key,valueStr);}logger.info(支付宝回调sign:{},trade_status:{},参数:{},params.get(sign),params.get(trade_status),params.toString());//验证是不是我们的订单号 总价是不是对的 数量是不是对的 等等//非常重要验证回调的正确性是不是支付宝发的并且能还要避免重复通知,这个说了好多次了ppt里面//我们使用rsa2 256位的进行验证 ctrlshiftt 查class ctrlo 查方法params.remove(sign_type);try {
// boolean alipoayRSACheckedV2 AlipaySignature.rsaCheckV2(params, Configs.getAlipayPublicKey(),utf-8,Configs.getSignType());boolean alipoayRSACheckedV2 AlipaySignature.rsaCheckV1(params,PropertiesAlipayUtil.getProperty(public_key),utf-8, RSA2);if(!alipoayRSACheckedV2){return ServerResponse.createByErrorMessage(验证不通过非法请求在恶意请求我就报网警了);}} catch (AlipayApiException e) {logger.error(支付宝验证回调异常,e);}//todo 验证各种数据 如果正确 减少库存 增加订单 修改状态 在service层做 你们下去自己做吧ServerResponse serverResponse iOrderService.aliCallback(params);if(serverResponse.isSuccess()){return Const.AlipayCallback.RESPONSE_SUCCESS;}return Const.AlipayCallback.RESPONSE_FAILED;}/*** 要求外部订单号必须唯一。* return*/public static String getOutTradeNo() {SimpleDateFormat format new SimpleDateFormat(MMddHHmmss, Locale.getDefault());Date date new Date();String key format.format(date);Random r new Random();key key r.nextInt();key key.substring(0, 15);return key;}