支付宝接口问题。return_url

项目在本地。没有发布到外网。 但是现在能够付款成功,我把return_url 写成本地的return_url.jsp。
但是接受不到数据。是我url写的不对还是?求大神指点。 之前我有一次debug是能够进入的,但后来进不去的。求解

2个回答

好像你要接受数据的话,要把项目放在外网才行,具体问下支付宝客服。

你本地,支付宝服务器访问不到,怎么返回URL给你

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
支付宝return_url验证失败
刚刚测试支付接口,显示验证失败,但是回到订单页面发现已经完成了付款操作,后来再次测试发现应该是notify_url 操作成功了,但是这是什么原因呢 两者验证时使用的是同样的AlipayNotify.verify(params)方法呀
支付宝沙箱测试支付成功后,跳转回调界面return_url报错
【问题描述】支付宝沙箱测试支付成功后,跳转回调界面return_url报错:系统有点儿忙,一会儿再试试。 错误码:SYSTEM_ERROR ![图片说明](https://img-ask.csdn.net/upload/201904/22/1555929809_405054.jpg) ![图片说明](https://img-ask.csdn.net/upload/201904/22/1555929822_13781.jpg) ![图片说明](https://img-ask.csdn.net/upload/201904/22/1555929832_347680.jpg) ![图片说明](https://img-ask.csdn.net/upload/201904/22/1555929839_380913.jpg) @Controller @RequestMapping("/Alipay") public class AlipayController { @RequestMapping(value="/goPay", method={RequestMethod.POST}) @ResponseBody public String goPay(ModelMap map, HttpServletRequest request, HttpServletResponse response) throws Exception{ //获得初始化的AlipayClient AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type); //设置请求参数 AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest(); alipayRequest.setReturnUrl(AlipayConfig.return_url); alipayRequest.setNotifyUrl(AlipayConfig.notify_url); //商户订单号,商户网站订单系统中唯一订单号,必填 String out_trade_no =new String(request.getParameter("WIDout_trade_no").getBytes("ISO-8859-1"),"UTF-8"); //付款金额,必填 String total_amount = new String(request.getParameter("WIDtotal_amount").getBytes("ISO-8859-1"),"UTF-8"); //订单名称,必填 String subject =new String(request.getParameter("WIDsubject").getBytes("ISO-8859-1"),"UTF-8"); //商品描述,可空 String body = new String(request.getParameter("WIDbody").getBytes("ISO-8859-1"),"UTF-8"); alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\"," + "\"total_amount\":\""+ total_amount +"\"," + "\"subject\":\""+ subject +"\"," + "\"body\":\""+ body +"\"," + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}"); //请求 String result = alipayClient.pageExecute(alipayRequest).getBody(); return result; } @RequestMapping(value = "/alipayReturnNotice") public ModelAndView alipayReturnNotice(HttpServletRequest request, HttpServletRequest response) throws Exception { System.out.println("支付成功, 进入同步通知接口..."); //获取支付宝GET过来反馈信息 Map<String,String> params = new HashMap<String,String>(); Map<String,String[]> requestParams = request.getParameterMap(); for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext();) { String name = (String) iter.next(); String[] values = (String[]) requestParams.get(name); String valueStr = ""; for (int i = 0; i < values.length; i++) { valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ","; } //乱码解决,这段代码在出现乱码时使用 valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8"); params.put(name, valueStr); } boolean signVerified = AlipaySignature.rsaCheckV1(params, AlipayConfig.alipay_public_key, AlipayConfig.charset, AlipayConfig.sign_type); //璋冪敤SDK楠岃瘉绛惧悕 ModelAndView mv = new ModelAndView("alipay/return_url"); if(signVerified) { //商户订单号 String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8"); //支付宝交易号 String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"),"UTF-8"); //付款金额 String total_amount = new String(request.getParameter("total_amount").getBytes("ISO-8859-1"),"UTF-8"); // 修改叮当状态,改为 支付成功,已付款; 同时新增支付流水 //寰呮坊鍔爋rderService.updateOrderStatus(out_trade_no, trade_no, total_amount); //Orders order = orderService.getOrderById(out_trade_no); //Product product = productService.getProductById(order.getProductId()); // // log.info("********************** 支付成功(支付宝同步通知) **********************"); // log.info("* 订单号: {}", out_trade_no); // log.info("* 支付宝交易号: {}", trade_no); // log.info("* 实付金额: {}", total_amount); // log.info("* 购买产品: {}", product.getName()); // log.info("***************************************************************"); mv.addObject("out_trade_no", out_trade_no); mv.addObject("trade_no", trade_no); mv.addObject("total_amount", total_amount); mv.addObject("flag", "success"); }else { //log.info("鏀粯, 楠岀澶辫触..."); System.out.println("鏀粯, 楠岀澶辫触..."); } return mv; } }
支付宝pc端支付成功后如何不经过同步回调接口实现跳转到自定义支付成功页面?
spring boot怎样实现电脑网站支付成功后直接跳转到自定义的支付成功页面,不经过支付宝的return_url接口,请大佬们指点?
支付宝的担保支付接口怎么用
支付宝的担保支付接口文件夹有三个文件![图片说明](https://img-ask.csdn.net/upload/201510/21/1445417894_625371.png) 1.这三个文件夹是干什么的。 第一个文件夹下.net下的文件夹 ![图片说明](https://img-ask.csdn.net/upload/201510/21/1445418152_790098.png) 2.先执行default.aspx,再执行notify_url.aspx,最后执行return_url.aspx。对吗? 3.怎么可以测试notify_url.aspx是否执行了呢?
支付宝 即时到账交易接口接 问题
我知道 即时到账交易接口接 在付款成功后会返回我自己网站的一个网页,官方的案例是return_url.php 返回这个网页,然后我在这个页面做处理,把付款记录写入数据库。但当用户在支付宝上付款后,没有等待跳转回自己的网页,这样的话我没办法操作,把付款信息写入数据库。请问有什么接口?可以让我之后再去查询我的订单交易状态吗?
支付宝接口调用报错,不知道是什么原因,各位大神帮忙看看呢
![图片说明](https://img-ask.csdn.net/upload/201708/29/1503988408_782216.png) // 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号 public static final String APP_ID = Const.APP_ID; // 商户私钥,您的PKCS8格式RSA2私钥 public static final String PRIVATE_KEY = Const.PRIVATE_KEY; // 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。 public static final String ALIPAY_PUBLIC_KEY = Const.ALIPAY_PUBLIC_KEY; // 服务器异步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 public static final String NOTIFY_URL = Const.ZHIAOADMINURL+"/alipayManager/notify.ajax"; // 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 public static final String RETURN_URL = Const.ZHIAOADMINURL+"alipayManager/return_url.do"; // 签名方式 public static final String SIGN_TYPE = "RSA2"; // 字符编码格式 public static final String CHARSET = "UTF-8"; // 支付宝网关 public static final String GATEWAY_URL = "https://openapi.alipay.com/gateway.do"; //参数返回格式,只支持json private static final String FORMAT = "json"; //↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ public static void aliPay(String outTradeNo, double totalAmount, String subject, HttpServletResponse response) throws IOException { //获得初始化的AlipayClient AlipayClient alipayClient = new DefaultAlipayClient(GATEWAY_URL, APP_ID, PRIVATE_KEY, FORMAT, CHARSET, ALIPAY_PUBLIC_KEY, SIGN_TYPE); AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();//创建API对应的request alipayRequest.setReturnUrl(RETURN_URL); alipayRequest.setNotifyUrl(NOTIFY_URL);//在公共参数中设置回跳和通知地址 StringBuilder bizContent = new StringBuilder("{\"out_trade_no\":\"").append(outTradeNo).append("\",\"total_amount\":").append(totalAmount). append(",\"subject\":\"").append(subject).append(",\"timeout_express\":\"10m\",\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}"); alipayRequest.setBizContent(bizContent.toString());//填充业务参数 System.out.println("请求报文为:----"+ JSON.toJSONString(alipayRequest)); String form = ""; try { form = alipayClient.pageExecute(alipayRequest).getBody(); //调用SDK生成表单 } catch (AlipayApiException e) { e.printStackTrace(); } response.setContentType("text/html;charset=" + CHARSET); PrintWriter out = response.getWriter(); out.write(form);//直接将完整的表单html输出到页面 out.flush(); out.close(); } 调用: String orderids= UUID.randomUUID().toString().replace("-", ""); double totalAmount = 0.01; //调用支付宝 String outTradeNo =orderids, subject = "测试标题"; AlipayConfig.aliPay(outTradeNo, totalAmount, subject, response);
支付宝即时到账接口notify—url.jsp
notify_url.jsp和return_url.jsp 这两个页面都有一段 if(verify_result){//验证成功 ////////////////////////////////////////////////////////////////////////////////////////// //请在这里加上商户的业务逻辑程序代码 //——请根据您的业务逻辑来编写程序(以下代码仅作参考)—— if(trade_status.equals("TRADE_FINISHED") || trade_status.equals("TRADE_SUCCESS")){ //判断该笔订单是否在商户网站中已经做过处理(可参考“集成教程”中“3.4返回数据处理”) //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 } //该页面可做页面美工编辑 out.println("验证成功<br />"); out.println("trade_no=" + trade_no); //——请根据您的业务逻辑来编写程序(以上代码仅作参考)—— ////////////////////////////////////////////////////////////////////////////////////////// }else{ //该页面可做页面美工编辑 out.println("验证失败"); } 一模一样的代码,那只要在其中一个写不就行了。为什么两个页面都有呢?
asp.net开发支付宝接口使用官方SDK后第一次跳转支付速度非常慢,是我调用问题还是结构有问题?
``` // 组装业务参数model AlipayTradePagePayModel model = new AlipayTradePagePayModel(); model.Body = body; model.Subject = subject; model.TotalAmount = total_amout; model.OutTradeNo = out_trade_no; model.PassbackParams = System.Web.HttpUtility.UrlEncode(strXml.ToString(), System.Text.Encoding.GetEncoding("GB2312")); ; model.ProductCode = "FAST_INSTANT_TRADE_PAY"; AlipayTradePagePayRequest request = new AlipayTradePagePayRequest(); // 设置同步回调地址 request.SetReturnUrl("http://" + HttpContext.Current.Request.Url.Host + ":" + HttpContext.Current.Request.Url.Port + "/AliPay/Return_url.aspx"); //request.SetReturnUrl($"http://"+ HttpContext.Current.Request.Url.Host +":" + HttpContext.Current.Request.Url.Port + "/AliPay/test.aspx"); // 设置异步通知接收地址 request.SetNotifyUrl(System.Configuration.ConfigurationManager.AppSettings["ReturnWebUrl"]); // 将业务model载入到request request.SetBizModel(model); AlipayTradePagePayResponse response = null; try { response = client.pageExecute(request); Response.Write(response.Body); Response.Flush(); Response.Close(); } catch (Exception exp) { throw exp; } ```
java支付宝接口,支付成功以后异步通知和同步返回不执行
![图片说明](https://img-ask.csdn.net/upload/201506/17/1434519174_549941.png)java支付宝接口成功跳转到了支付宝页面,支付成功以后异步通知和同步返回不执行 网页集成支付宝接口,支付成功以后,异步通知和同步返回不执行 配置文件部分代码: public static String log_path = "D:\\aliPayLog\\"; /** * 字符编码格式 目前支持 gbk 或 utf-8 */ public static String input_charset = "utf-8"; /** * 签名方式 不需修改 */ public static String sign_type = "MD5"; /** * 服务器异步通知页面路径 */ public static final String notifyUrl = "localhost:8087/AliPay/Notify"; /** * 同步通知页面路径 */ public static final String returnUrl = "localhost:8087/AliPay/Return"; /** * 支付类型 */ public static final String paymentType = "1"; controller部分代码: @RequestMapping(value = "/Notify") public void NotifyUrl(HttpServletRequest request, HttpServletResponse response) throws ParseException { PrintWriter out = null; try { out = response.getWriter(); boolean isTrue = GetAliPayReturn(request); if (isTrue) out.write("success"); else out.write("fail"); } catch (IOException e) { e.printStackTrace(); } } @RequestMapping(value = "/Return") public String ReturnUrl(HttpServletRequest request) throws UnsupportedEncodingException, ParseException { boolean isTrue = GetAliPayReturn(request); if (isTrue) return "redirect:/center/myOrder"; // 我的订单 else return "redirect: /alipay/alipayErr"; } private boolean GetAliPayReturn(HttpServletRequest request) throws UnsupportedEncodingException, ParseException { Map<String, String> params = new HashMap<String, String>(); Map requestParams = request.getParameterMap(); for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext();) { String name = (String) iter.next(); ​ String[] values = (String[]) requestParams.get(name); String valueStr = ""; for (int i = 0; i < values.length; i++) { valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ","; } // 乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化 // valueStr = new String(valueStr.getBytes("ISO-8859-1"), "UTF-8"); if (valueStr != null && !"".equals(valueStr)) { if (!(java.nio.charset.Charset.forName("GBK").newEncoder().canEncode(valueStr))) { try { valueStr = new String(valueStr.getBytes("ISO-8859-1"), "UTF-8"); } catch (Exception e) { e.printStackTrace(); } } } params.put(name, valueStr); } boolean verify_result = AlipayNotify.verify(params); if (verify_result) { // 订单id String ID = params.get("extra_common_param"); // 订单编号 String order_id = params.get("out_trade_no"); // 支付宝交易号 String tradeNo = params.get("trade_no"); // 交易状态 String payStatus = params.get("trade_status"); StringBuilder strSql = new StringBuilder(); strSql.append("UPDATE t_order "); // 获得订单id if (payStatus.equals("TRADE_FINISHED")) { strSql.append("set order_status = 3 "); } else if (payStatus.equals("TRADE_SUCCESS")) { strSql.append("set order_status = 3 "); } else { strSql.append("set order_status = 4 "); } strSql.append(" where order_number = '" + order_id + "' "); Statement stmt = null; Connection conn = null; try { String driver = "com.mysql.jdbc.Driver"; // 驱动程序名 String url = "jdbc:mysql://192.168.1.252:3306/travel?characterEncoding=UTF-8"; // URL指向要访问的数据库名scutcs String user = "root"; // MySQL配置时的用户名 String password = "mysql"; // MySQL配置时的密码 Class.forName(driver); // 加载驱动程序 conn = DriverManager.getConnection(url, user, password); // 连续数据库 stmt = conn.createStatement(); stmt.execute(strSql.toString()); return true; } catch (Exception e) { e.printStackTrace(); } finally { try { conn.close(); stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } } return false; }
jsp中request取值和java中request取值问题
最近在做支付宝即时到账 ``` alipayapi.jsp <%@page import="java.io.Console"%> <% /* * *功能:即时到账交易接口接入页 *版本:3.4 *修改日期:2016-03-08 *说明: *以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。 *该代码仅供学习和研究支付宝接口使用,只是提供一个参考。 *************************注意***************** *如果您在接口集成过程中遇到问题,可以按照下面的途径来解决 *1、开发文档中心(https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.KvddfJ&treeId=62&articleId=103740&docType=1) *2、商户帮助中心(https://cshall.alipay.com/enterprise/help_detail.htm?help_id=473888) *3、支持中心(https://support.open.alipay.com/alipay/support/index.htm) *如果不想使用扩展功能请把扩展功能参数赋空值。 ********************************************** */ %> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="com.alipay.config.*"%> <%@ page import="com.alipay.util.*"%> <%@ page import="java.util.HashMap"%> <%@ page import="java.util.Map"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>支付宝即时到账交易接口</title> </head> <% ////////////////////////////////////请求参数////////////////////////////////////// //商户订单号,商户网站订单系统中唯一订单号,必填 String out_trade_no = new String(request.getParameter("WIDout_trade_no").getBytes("ISO-8859-1"),"UTF-8"); //订单名称,必填 String subject = new String(request.getParameter("WIDsubject").getBytes("ISO-8859-1"),"UTF-8"); //付款金额,必填 String total_fee = new String(request.getParameter("WIDtotal_fee").getBytes("ISO-8859-1"),"UTF-8"); //商品描述,可空 String body = new String(request.getParameter("WIDbody").getBytes("ISO-8859-1"),"UTF-8"); System.out.print(subject); ////////////////////////////////////////////////////////////////////////////////// //把请求参数打包成数组 Map<String, String> sParaTemp = new HashMap<String, String>(); sParaTemp.put("service", AlipayConfig.service); sParaTemp.put("partner", AlipayConfig.partner); sParaTemp.put("seller_id", AlipayConfig.seller_id); sParaTemp.put("_input_charset", AlipayConfig.input_charset); sParaTemp.put("payment_type", AlipayConfig.payment_type); sParaTemp.put("notify_url", AlipayConfig.notify_url); sParaTemp.put("return_url", AlipayConfig.return_url); sParaTemp.put("anti_phishing_key", AlipayConfig.anti_phishing_key); sParaTemp.put("exter_invoke_ip", AlipayConfig.exter_invoke_ip); sParaTemp.put("out_trade_no", out_trade_no); sParaTemp.put("subject", subject); sParaTemp.put("total_fee", total_fee); sParaTemp.put("body", body); //其他业务参数根据在线开发文档,添加参数.文档地址:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.O9yorI&treeId=62&articleId=103740&docType=1 //如sParaTemp.put("参数名","参数值"); //建立请求 String sHtmlText = AlipaySubmit.buildRequest(sParaTemp,"get","确认"); System.out.print(sHtmlText); out.println(sHtmlText); %> <body> </body> </html> ``` 整合成servlet java代码 ``` protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //订单号 String out_trade_no = getTradeNo(); PrintWriter out = response.getWriter(); response.setContentType("text/html; charset=utf-8"); request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); //商品名 System.out.println(request.getParameter("WIDsubject")); String subject =new String(request.getParameter("WIDsubject").getBytes("ISO-8859-1"),"UTF-8"); System.out.println(subject); //金额 String total_fee = new String(request.getParameter("WIDtotal_fee").getBytes("ISO-8859-1"),"UTF-8"); //描述 String body =subject; String sub=request.getParameter("WIDsubject"); //数据封装 Map<String, String> sParaTemp = new HashMap<String, String>(); sParaTemp.put("service", AlipayConfig.service); sParaTemp.put("partner", AlipayConfig.partner); sParaTemp.put("seller_id", AlipayConfig.seller_id); sParaTemp.put("_input_charset", AlipayConfig.input_charset); sParaTemp.put("payment_type", AlipayConfig.payment_type); sParaTemp.put("notify_url", AlipayConfig.notify_url); sParaTemp.put("return_url", AlipayConfig.return_url); sParaTemp.put("anti_phishing_key", AlipayConfig.anti_phishing_key); sParaTemp.put("exter_invoke_ip", AlipayConfig.exter_invoke_ip); sParaTemp.put("out_trade_no", out_trade_no); sParaTemp.put("subject", subject); sParaTemp.put("total_fee", total_fee); sParaTemp.put("body", body); //发送请求 String sHtmlText = AlipaySubmit.buildRequest(sParaTemp,"get","确认"); System.out.println(sHtmlText); out.println(sHtmlText); } ``` action写出alipayapi.jsp支付跳转页面,商品名显示正常,改成servlet,跳转中文乱码,求解决办法。。。。。 ![图片说明](https://img-ask.csdn.net/upload/201608/09/1470754770_509899.png)
android调起支付宝h5界面后取消支付返回,再次点击会调用onProgressChanged方法
在webview界面中点击h5界面的按钮,h5通过接口查询订单情况,如果有订单弹通知让用户去支付,如果没有订单,就调起支付宝h5界面去支付。 现在调起支付宝h5界面后取消支付返回,当前页面不做任何修改,然后再次点击按钮,这时候会弹一个窗口告诉用户已有订单让他去支付,但这个时候webview会调用onProgressChanged,却并没有加载新的网址出现,是什么情况? ``` goPay() { if (this.canRequsetFlag == false) { return } this.canRequsetFlag = false let param = {} tongji.order_pay(this.goodsId) param.commodity_no = this.goodsId param.amount = 1 if(this.currentRedPacketAllInfo.coupon_type){ param.coupon_type = this.currentRedPacketAllInfo.coupon_type param.coupon_id = this.currentRedPacketAllInfo.coupon_id param.coupon_code = this.currentRedPacketAllInfo.coupon_code } param.pay_way = 1 console.log(param) let jsonData = protocol.getJsonParamsCCB(protocol.buyProduct, param, utils.getUUID()); http.ajax('', jsonData, false, (data) => { this.checkWrapShow = false if(data=='0050008'){ this.showDialogNoPay=true this.canRequsetFlag = true return; } setTimeout(()=>{ if (isInApp()) { console.log('在app中') window.location.href=(data.pay_address) } else { let host = window.location.host window.location.href=(document.location.protocol + '//' + host + window.location.pathname + '#/' + 'paymentPage' + '?from=2&out_trade_no=' + data.order_num_pay + '&url=' + btoa(data.pay_address)) } this.canRequsetFlag = true },100) },()=>{ this.canRequsetFlag = true }) } <div class="btn-style okBtn base-b-group" @click="goPay">去支付</div> ``` 而且onProgressChanged是在ajax方法结果返回前调用的,有哪位大神指导一下?
Java开发支付宝接口(报文报不是UTF-8编码的错误)
package com.spasvo.main; import com.csii.pp.key.KeyProvider; import com.csii.pp.signature.XMLSignature; import com.csii.pp.transport.HttpClientTransport; import java.net.URL; public class AlipayTest { private XMLSignature xs = new com.csii.pp.signature.XMLSignature(); private static String contentType = "application/xml; charset=utf-8"; private static String encoding = "UTF-8"; //签名 public String sign(String xmlString, String sigNode) throws Exception{ byte[] signature = xs.sign(xmlString.getBytes("UTF-8"), "Message", sigNode, kp.getPrivateKey("bkt0452010061201", "111111")); return new String(signature, "UTF-8"); } // public void send(String urlString,String xmlString,String reqId){ public void send(){ String xmlString = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Cartoon><Message id=\"249f9d82-b7e4-4608-b0bb-0cb0ba973aa1\"><CSVReq id=\"CSVReq\"><version>3.0.0</version><instId>ALIPAY</instId><certId>ALIPAY2007072500</certId><date>20140610 10:21:52</date><accountName>王洪章</accountName><bankCardNo>6217524512001000319</bankCardNo><bankCardType>D</bankCardType><certificateType>1</certificateType><certificateNo>230102194410242416</certificateNo><mobilePhone>13502513211</mobilePhone></CSVReq></Message></Cartoon>"; String reqId = "CSVReq"; String urlString = "http://130.1.9.222:9082/paygate/alipay"; try{ HttpClientTransport httpClientTransport = new HttpClientTransport(); String body=sign(xmlString, reqId); StringBuffer message = new StringBuffer(messageHead); message.append(body); String all = message.toString(); System.out.println("请求报文:"+all); URL url = new URL(urlString); httpClientTransport.setProtocol(url.getProtocol()); httpClientTransport.setHost(url.getHost()); httpClientTransport.setPort(url.getPort() == -1 ? url.getDefaultPort() : url.getPort()); httpClientTransport.setTarget(url.getPath()); httpClientTransport.setQueryString(url.getQuery()); httpClientTransport.setContentType(contentType); httpClientTransport.submit(all.getBytes()); }catch(Exception e){ e.printStackTrace(); } } public static void main(String[] args) { AlipayTest a = new AlipayTest(); try { a.send(); // a.send(url,xmlString,reqId); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 这个是测试的程序,可以成功发送和接受报文,但是用项目调用这个方法发送报文的时候,给我们返回的报文报我们发送的报文不是UTF-8编码的报文。我的项目的编码是UTF-8的编码,类的编码也是UTF-8的编码, 求大神指教一下这是什么原因。
android 关于支付宝移动支付的一些问题
从支付宝官网下载了一个支付的demo。在植入自己的项目时候我把关于支付的代码都抽取出来了。 手机上有支付宝客户端的时候能正常调用。当卸载支付宝后无法调用了。 /** * @date 2016年6月6日 下午7:54:33 * @Class MpayUtils */ package com.example.testzhifu; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import java.util.Random; import com.alipay.sdk.app.PayTask; import android.annotation.SuppressLint; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.os.Handler; import android.os.Message; import android.support.v4.app.FragmentActivity; import android.text.TextUtils; import android.widget.Toast; public class MpayUtils { private FragmentActivity activity; public MpayUtils(Context context, FragmentActivity activity) { super(); this.activity = activity; } // 商户PID public static final String PARTNER = ""; // 商户收款账号 public static final String SELLER = ""; // 商户私钥,pkcs8格式 public static final String RSA_PRIVATE = ""; // 支付宝公钥 public static final String RSA_PUBLIC = ""; private static final int SDK_PAY_FLAG = 1; @SuppressLint("HandlerLeak") private Handler mHandler = new Handler() { @SuppressWarnings("unused") public void handleMessage(Message msg) { switch (msg.what) { case SDK_PAY_FLAG: { PayResult payResult = new PayResult((String) msg.obj); /** * 同步返回的结果必须放置到服务端进行验证(验证的规则请看https://doc.open.alipay.com/doc2/ * detail.htm?spm=0.0.0.0.xdvAU6&treeId=59&articleId=103665& * docType=1) 建议商户依赖异步通知 */ String resultInfo = payResult.getResult();// 同步返回需要验证的信息 String resultStatus = payResult.getResultStatus(); // 判断resultStatus 为“9000”则代表支付成功,具体状态码代表含义可参考接口文档 if (TextUtils.equals(resultStatus, "9000")) { Toast.makeText(activity, "支付成功", Toast.LENGTH_SHORT).show(); } else { // 判断resultStatus 为非"9000"则代表可能支付失败 // "8000"代表支付结果因为支付渠道原因或者系统原因还在等待支付结果确认,最终交易是否成功以服务端异步通知为准(小概率状态) if (TextUtils.equals(resultStatus, "8000")) { Toast.makeText(activity, "支付结果确认中", Toast.LENGTH_SHORT).show(); } else { // 其他值就可以判断为支付失败,包括用户主动取消支付,或者系统返回的错误 Toast.makeText(activity, "支付失败", Toast.LENGTH_SHORT).show(); } } break; } default: break; } }; }; /** * call alipay sdk pay. 调用SDK支付 * */ public void pay(String arg1, String arg2, String arg3) { if (TextUtils.isEmpty(PARTNER) || TextUtils.isEmpty(RSA_PRIVATE) || TextUtils.isEmpty(SELLER)) { new AlertDialog.Builder(activity).setTitle("警告").setMessage("需要配置PARTNER | RSA_PRIVATE| SELLER") .setPositiveButton("确定", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialoginterface, int i) { // } }).show(); return; } String orderInfo = getOrderInfo(arg1, arg2, arg3); /** * 特别注意,这里的签名逻辑需要放在服务端,切勿将私钥泄露在代码中! */ String sign = sign(orderInfo); try { /** * 仅需对sign 做URL编码 */ sign = URLEncoder.encode(sign, "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } /** * 完整的符合支付宝参数规范的订单信息 */ final String payInfo = orderInfo + "&sign=\"" + sign + "\"&" + getSignType(); Runnable payRunnable = new Runnable() { @Override public void run() { // 构造PayTask 对象 PayTask alipay = new PayTask(activity); // 调用支付接口,获取支付结果 String result = alipay.pay(payInfo, true); Message msg = new Message(); msg.what = SDK_PAY_FLAG; msg.obj = result; mHandler.sendMessage(msg); } }; // 必须异步调用 Thread payThread = new Thread(payRunnable); payThread.start(); } /** * create the order info. 创建订单信息 * */ private String getOrderInfo(String subject, String body, String price) { // 签约合作者身份ID String orderInfo = "partner=" + "\"" + PARTNER + "\""; // 签约卖家支付宝账号 orderInfo += "&seller_id=" + "\"" + SELLER + "\""; // 商户网站唯一订单号 orderInfo += "&out_trade_no=" + "\"" + getOutTradeNo() + "\""; // 商品名称 orderInfo += "&subject=" + "\"" + subject + "\""; // 商品详情 orderInfo += "&body=" + "\"" + body + "\""; // 商品金额 orderInfo += "&total_fee=" + "\"" + price + "\""; // 服务器异步通知页面路径 orderInfo += "&notify_url=" + "\"" + "http://notify.msp.hk/notify.htm" + "\""; // 服务接口名称, 固定值 orderInfo += "&service=\"mobile.securitypay.pay\""; // 支付类型, 固定值 orderInfo += "&payment_type=\"1\""; // 参数编码, 固定值 orderInfo += "&_input_charset=\"utf-8\""; // 设置未付款交易的超时时间 // 默认30分钟,一旦超时,该笔交易就会自动被关闭。 // 取值范围:1m~15d。 // m-分钟,h-小时,d-天,1c-当天(无论交易何时创建,都在0点关闭)。 // 该参数数值不接受小数点,如1.5h,可转换为90m。 orderInfo += "&it_b_pay=\"30m\""; // extern_token为经过快登授权获取到的alipay_open_id,带上此参数用户将使用授权的账户进行支付 // orderInfo += "&extern_token=" + "\"" + extern_token + "\""; // 支付宝处理完请求后,当前页面跳转到商户指定页面的路径,可空 orderInfo += "&return_url=\"m.alipay.com\""; // 调用银行卡支付,需配置此参数,参与签名, 固定值 (需要签约《无线银行卡快捷支付》才能使用) // orderInfo += "&paymethod=\"expressGateway\""; return orderInfo; } /** * get the out_trade_no for an order. 生成商户订单号,该值在商户端应保持唯一(可自定义格式规范) * */ private 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; } /** * sign the order info. 对订单信息进行签名 * * @param content * 待签名订单信息 */ private String sign(String content) { return SignUtils.sign(content, RSA_PRIVATE); } /** * get the sign type we use. 获取签名方式 * */ private String getSignType() { return "sign_type=\"RSA\""; } }
支付宝java服务端 测试报错 大神来救
根本不理解支付宝提供的demo 从网上使用别人的源码 String orderStr=""; try { Map<String, String> orderMap = new LinkedHashMap<String, String>(); // 订单实体 Map<String, String> bizModel = new LinkedHashMap<String, String>(); // 公共实体 /****** 2.商品参数封装开始 *****/ // 手机端用 // 商户订单号,商户网站订单系统中唯一订单号,必填 orderMap.put("out_trade_no", "100000"); // 订单名称,必填 orderMap.put("subject", "***支付"); // 付款金额,必填 orderMap.put("total_amount", String.valueOf(10000)); // 销售产品码 必填 orderMap.put("product_code", "QUICK_WAP_PAY"); /****** --------------- 3.公共参数封装 开始 ------------------------ *****/ // 支付宝用 // 1.商户appid bizModel.put("app_id", AlipayConfig.APPID); // 2.请求网关地址 bizModel.put("method", AlipayConfig.URL); // 3.请求格式 bizModel.put("format", AlipayConfig.FORMAT); // 4.回调地址 bizModel.put("return_url", AlipayConfig.notify_url); // 5.私钥 bizModel.put("private_key", AlipayConfig.private_key); // 6.商家id bizModel.put("seller_id", AlipayConfig.partner); // 7.加密格式 bizModel.put("sign_type", AlipayConfig.sign_type + ""); /****** --------------- 3.公共参数封装 结束 ------------------------ *****/ // 实例化客户端 AlipayClient client = new DefaultAlipayClient(AlipayConfig.URL, AlipayConfig.APPID, AlipayConfig.private_key, AlipayConfig.FORMAT, AlipayConfig.input_charset, AlipayConfig.ali_public_key, AlipayConfig.sign_type); // 实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay AlipayTradeAppPayRequest ali_request = new AlipayTradeAppPayRequest(); // SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。 AlipayTradeAppPayModel model = new AlipayTradeAppPayModel(); // model.setPassbackParams(URLEncoder.encode((String)orderMap.get("body").toString()));; // //描述信息 添加附加数据 // model.setBody(orderMap.get("body")); //商品信息 model.setSubject(orderMap.get("subject")); // 商品名称 model.setOutTradeNo(orderMap.get("out_trade_no")); // 商户订单号(自动生成) model.setTotalAmount(orderMap.get("total_amount")); // 支付金额 model.setProductCode(orderMap.get("product_code")); // 销售产品码 model.setSellerId(AlipayConfig.partner); // 商家id ali_request.setBizModel(model); ali_request.setNotifyUrl(AlipayConfig.notify_url); // 回调地址 AlipayTradeAppPayResponse responses = client.sdkExecute(ali_request); orderStr = responses.getBody(); System.err.println(orderStr); // 就是orderString 可以直接给客户端请求,无需再做处理 } catch (Exception e) { e.printStackTrace(); } return orderStr; AlipayConfig是配置文件 包含密钥之类的 报错为 com.alipay.api.AlipayApiException: RSAcontent = alipay_sdk=alipay-sdk-java-dynamicVersionNo&app_id=2018030202299464&biz_content={"out_trade_no":"100000","product_code":"QUICK_WAP_PAY","seller_id":"2088031415344595","subject":"***支付","total_amount":"10000"}&charset=utf-8&format=json&method=alipay.trade.app.pay&sign_type=RSA2&timestamp=2018-04-12 11:55:38&version=1.0; charset = utf-8 at com.alipay.api.internal.util.AlipaySignature.rsa256Sign(AlipaySignature.java:141) at com.alipay.api.internal.util.AlipaySignature.rsaSign(AlipaySignature.java:102) at com.alipay.api.DefaultAlipayClient.getRequestHolderWithSign(DefaultAlipayClient.java:323) at com.alipay.api.DefaultAlipayClient.sdkExecute(DefaultAlipayClient.java:163) at com.yinuoapp.controller.Alipay00200009Controller.alipay(Alipay00200009Controller.java:83) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:222) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:814) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:737) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:969) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:860) at javax.servlet.http.HttpServlet.service(HttpServlet.java:624) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:845) at javax.servlet.http.HttpServlet.service(HttpServlet.java:731) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at com.yinuo.server.Filters.doFilter(Filters.java:50) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:958) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:452) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1087) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745) Caused by: java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException : DER input, Integer tag error at sun.security.rsa.RSAKeyFactory.engineGeneratePrivate(RSAKeyFactory.java:217) at java.security.KeyFactory.generatePrivate(KeyFactory.java:372) at com.alipay.api.internal.util.AlipaySignature.getPrivateKeyFromPKCS8(AlipaySignature.java:202) at com.alipay.api.internal.util.AlipaySignature.rsa256Sign(AlipaySignature.java:123) ... 48 more Caused by: java.security.InvalidKeyException: IOException : DER input, Integer tag error at sun.security.pkcs.PKCS8Key.decode(PKCS8Key.java:351) at sun.security.pkcs.PKCS8Key.decode(PKCS8Key.java:356) at sun.security.rsa.RSAPrivateCrtKeyImpl.<init>(RSAPrivateCrtKeyImpl.java:91) at sun.security.rsa.RSAPrivateCrtKeyImpl.newKey(RSAPrivateCrtKeyImpl.java:75) at sun.security.rsa.RSAKeyFactory.generatePrivate(RSAKeyFactory.java:316) at sun.security.rsa.RSAKeyFactory.engineGeneratePrivate(RSAKeyFactory.java:213) ... 51 more 根本不懂 求大神救我
IE浏览器下直接报错SCRIPT1002: 语法错误 index.html, 行420 字符2 其他浏览器无任何错误
我用的的单独vue.js文件 其他的浏览器没有任何影响 请问一下各位 这是哪里不正确,百度也查了 改一个地方其他的地方又给你一个错 改着后面谷歌之类的浏览器都用不了了, <script type="text/javascript"> const BASE_URL = '/admin.php/pay/'; const USERID = '142'; const app = new Vue({ el: '#app', data: { product_type: 1, level: 1, grades: [], products: [], choose_product: null, choose_prodouct_id: null, time: 5, name: null, address: null, phone: null, note: '', delivery: 0, pay: 'wechatpay', title: '提示', content: '内容', number: 1, timer: null, order_id: null, shunfeng: 15 }, computed: { product_select_class() { return function(type) { return this.product_type == type ? 'select-class select-hover' : 'select-class'; } }, level_select_class() { return function(level) { return this.level == level ? 'insurance-select select-hover' : 'insurance-select'; } }, time_select_class() { return function(time) { return this.time == time ? 'insurance-select select-hover' : 'insurance-select'; } }, delivery_select_class() { return function(delivery) { return this.delivery == delivery ? 'insurance-select select-hover' : 'insurance-select'; } }, pay_btn_select_class() { return function(pay) { if (pay === 'wechatpay') { return this.pay === pay ? 'btn-wechatpay pay_type_active' : 'btn-alipay'; } else if (pay === 'alipay') { return this.pay === pay ? 'btn-alipay pay_type_active' : 'btn-wechatpay'; } } }, pay_check_select_class() { return function(pay) { if (pay === 'wechatpay') { return this.pay === pay ? 'pay_type_wechatcheck pay_type_wchecked' : 'pay_type_alipaycheck'; } else if (pay === 'alipay') { return this.pay === pay ? 'pay_type_alipaycheck pay_type_achecked' : 'pay_type_wechatcheck'; } } }, prodouct_select_class() { return function(prodouct) { return this.choose_prodouct_id == prodouct ? 'insurance-select select-hover' : 'insurance-select'; } }, has_level() { if (this.product_type == 1 || this.product_type == 6) { return true; } return false; }, totalPrice() { return (price) => { let outher = this.delivery == 1 ? this.shunfeng : 0; return parseFloat(parseFloat((price * this.number) + (outher * this.number)).toFixed(2)); } } }, created() { this.fetchData(); }, methods: { fetchData() { this.fetchGrades(); this.fetchProduct(); }, reduce() { if (this.number > 1) { this.number --; } }, add() { this.number ++; }, async fetchGrades() { this.grades = await this.getNormal(BASE_URL + 'grades'); }, async fetchProduct() { let url = BASE_URL + 'products'; switch(Number(this.product_type)) { case 1: this.products = await this.getNormal(url, {type: this.product_type, grade: this.level, time: this.time}); break; case 4: this.products = await this.getNormal(url, {type: this.product_type}); break; case 3: this.products = await this.getNormal(url, {type: this.product_type}); break; case 6: this.products = await this.getNormal(url, {type: this.product_type, grade: this.level}); break; } }, async getNormal(url, params = null, method="GET", data=null) { if (params) { let paramsArray = []; Object.keys(params).forEach(key => paramsArray.push(key + '=' + params[key])); if (url.search(/\?/) === -1) { url += '?' + paramsArray.join('&'); } else { url += '&' + paramsArray.join('&'); } } return new Promise((resolve, reject) => { $.ajax({ type: method, url: url, dataType: 'json', data: data, success: (response) => { resolve(response) } }) }); }, async choose_level(grade) { this.level = grade; this.clean_choose_product(); await this.fetchProduct(); }, async choose_time(time) { this.time = time; this.clean_choose_product(); await this.fetchProduct(); }, async choose_product_type(type) { this.product_type = type; this.clean_choose_product(); await this.fetchProduct(); }, choose_delivery(delivery) { this.delivery = delivery; }, choose_pay(pay) { this.pay = pay; }, choose_product_func(product) { this.choose_product = { 'id': product.id, 'name': product.name, 'price': product.price, } this.choose_prodouct_id = product.id; }, clean_choose_product() { this.choose_prodouct_id = null; this.choose_product = null; }, async confirm() { if (!this.choose_product) { return this.openTip("请选择产品!", "提示: "); } const numberReg = /^[0-9]*$/ let pay = this.pay === 'wechatpay' ? 'weixin' : 'zhifubaoweixin'; // let formData = new FormData(); let url = BASE_URL + 'production'; let data = { 'userid': USERID, 'value': this.choose_product.id, 'pay': pay, } // formData.append('userid', USERID); // formData.append('value', this.choose_product.id); // formData.append('pay', pay); if (this.product_type == 4) { if (!this.name) { return this.openTip('请填写收货人姓名!'); } if (!this.phone) { return this.openTip('请填写联系电话!'); } if (!this.address) { return this.openTip('请填写收货地址!'); } if (!numberReg.test(this.number)) { return this.openTip('请输入正确的数量!'); } if (this.number < 1) { return this.openTip('购买数量必须大于1!'); } if (this.delivery == null) { return this.openTip('请选择快递类型!'); } data.name = this.name; data.phone = this.phone; data.address = this.address; data.note = this.note; data.number = this.number; data.courier = this.delivery; // formData.append('name', this.name); // formData.append('phone', this.phone); // formData.append('address', this.address); // formData.append('note', this.note); // formData.append('number', this.number); // formData.append('courier', this.delivery); } // 发送POST请求 let response = await this.getNormal(url, {type: 2}, 'POST', data); if (response.code === 'error') { return this.openTip(response.msg) } // 展示二维码 let title = pay === 'weixin' ? '请使用微信扫一扫付款' : '请使用支付宝扫一扫付款' this.openTip('', title); $('#qrcode').html(''); $('#qrcode').qrcode(response.msg); this.order_id = response.order_id; // 设置定时器请求后台接口 this.timer = setInterval(this.order_status, 1000 * 3); }, async order_status() { url = BASE_URL + 'status'; response = await this.getNormal(url, {order_id: this.order_id}); if (response.status == 1) { this.title = '付款成功, 即将跳装到购买记录页面!'; clearInterval(this.timer); setTimeout(function() { window.location.href = '/admin.php/pay/record'; }, 3000); } }, openTip(content='', title='提示') { this.title = title; this.content = content; $('#myModal').modal({ keyboard: false }); }, closeTip() { this.title = ''; this.content = ''; $('#myModal').modal('hide'); clearInterval(this.timer); } } }); </script>
java微信公众号 js调用微信支付报错 errMsg:chooseWXPay:fail
奖励有点少,实在是没有c币了。 下面是我的js,不清楚到底是什么原因导致的,各位大神帮忙给解决下吧;具体报错:config签名啥的是OK的,但是在调用chooseWXPay的时候,就失败了 报错errMsg:chooseWXPay:fail 没有别的提示信息,不清楚失败原因 $('#pay_sub_btn').on(touchType, function(){ var _this = $(this); var payType = $('#pay_type').val(); var orderId = $('#J_payOrder_id').val(); var orderSn = $('#J_payOrder_sn').val(); var payFee = $('#J_payOrder_card_no').val(); var fieldLabel = $('#fieldLabel').val(); var date = $('#date').val(); var orderTimes = $('#orderTimes').val(); var gymName = $('#gymName').val(); var path = $('#basePath').val(); hideError(); lock = true; _this.text('支付中...'); if(payType == 13){ //支付宝支付 }else{ $.ajax({ url:path+"/orders/OrdersPayForWx.do?orderId="+orderId }).done(function(data){ var obj = eval('(' + data + ')'); if(parseInt(obj.agent)<5 && obj.agent != "false"){ alert("您的微信版本低于5.0无法使用微信支付,请升级之后再操作!~"); return; }else if(obj.agent == "false"){ alert("请使用微信浏览器操作!~"); return; } if(obj.code == "0"){ alert("登陆已经过期,请重新登录!~"); window.location.href = path+'/login.jsp'; } wx.config({ debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: obj.appId, // 必填,公众号的唯一标识 timestamp: obj.contime, // 必填,生成签名的时间戳 nonceStr: obj.constr, // 必填,生成签名的随机串 signature: obj.consign,// 必填,签名,见附录1 jsApiList: ['chooseWXPay'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ wx.chooseWXPay({ "timestamp": obj.paytime, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符 "nonceStr": obj.paystr, // 支付签名随机串,不长于 32 位 "package": obj.paypack, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***) "signType": obj.paysigntype, // 签名方式,默认为'SHA1',使用新版支付需传入'MD5' "paySign": obj.paysign, // 支付签名 success: function (res) { // 支付成功后的回调函数 alert(res.err_msg); _this.text('支付'); if(res.err_msg == "get_brand_wcpay_request:ok" ) { _this.text('支付'); // 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回 ok,但并不保证它绝对可靠。 window.location.href = path + '/orders/GetOrders.do?page=1&pageSize=10&orderStatus=0'; }else{ alert(res.errMsg); alert(res.err_msg); _this.text('支付'); return false; } } }); }); wx.error(function(res){ alert(res.err_msg); _this.text('支付'); return false; }); }); } });
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
在中国程序员是青春饭吗?
今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...
《MySQL 性能优化》之理解 MySQL 体系结构
本文介绍 MySQL 的体系结构,包括物理结构、逻辑结构以及插件式存储引擎。
python自动下载图片
近日闲来无事,总有一种无形的力量萦绕在朕身边,让朕精神涣散,昏昏欲睡。 可是,像朕这么有职业操守的社畜怎么能在上班期间睡瞌睡呢,我不禁陷入了沉思。。。。 突然旁边的IOS同事问:‘嘿,兄弟,我发现一个网站的图片很有意思啊,能不能帮我保存下来提升我的开发灵感?’ 作为一个坚强的社畜怎么能说自己不行呢,当时朕就不假思索的答应:‘oh, It’s simple. Wait for me for a ...
一名大专同学的四个问题
【前言】   收到一封来信,赶上各种事情拖了几日,利用今天要放下工作的时机,做个回复。   2020年到了,就以这一封信,作为开年标志吧。 【正文】   您好,我是一名现在有很多困惑的大二学生。有一些问题想要向您请教。   先说一下我的基本情况,高考失利,不想复读,来到广州一所大专读计算机应用技术专业。学校是偏艺术类的,计算机专业没有实验室更不用说工作室了。而且学校的学风也不好。但我很想在计算机领...
复习一周,京东+百度一面,不小心都拿了Offer
京东和百度一面都问了啥,面试官百般刁难,可惜我全会。
达摩院十大科技趋势发布:2020 非同小可!
【CSDN编者按】1月2日,阿里巴巴发布《达摩院2020十大科技趋势》,十大科技趋势分别是:人工智能从感知智能向认知智能演进;计算存储一体化突破AI算力瓶颈;工业互联网的超融合;机器间大规模协作成为可能;模块化降低芯片设计门槛;规模化生产级区块链应用将走入大众;量子计算进入攻坚期;新材料推动半导体器件革新;保护数据隐私的AI技术将加速落地;云成为IT技术创新的中心 。 新的画卷,正在徐徐展开。...
轻松搭建基于 SpringBoot + Vue 的 Web 商城应用
首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API ...
Python+OpenCV实时图像处理
目录 1、导入库文件 2、设计GUI 3、调用摄像头 4、实时图像处理 4.1、阈值二值化 4.2、边缘检测 4.3、轮廓检测 4.4、高斯滤波 4.5、色彩转换 4.6、调节对比度 5、退出系统 初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
python爬取百部电影数据,我分析出了一个残酷的真相
2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%;国产电影总票房411.75亿元,同比增长8.65%,市场占比 64.07%;城市院线观影人次17.27亿,同比增长0.64%。 看上去似乎是一片大好对不对?不过作为一名严谨求实的数据分析师,我从官方数据中看出了一点端倪:国产票房增幅都已经高达8.65%了,为什...
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
C++(数据结构与算法):62---搜索树(二叉搜索树、索引二叉搜索树)
一、搜索树的复杂度分析 本文考察二叉搜索树和索引二叉搜索树 二叉搜索树的渐进性能可以和跳表媲美: 查找、插入、删除操作所需的平均时间为Θ(logn) 查找、插入、删除操作的最坏情况的时间为Θ(n) 元素按升序输出时所需时间为Θ(n) 虽然在最坏情况下的查找、插入、删除操作,散列表和二叉搜索树的时间性能相同,但是散列表在最好的情况下具有超级性能Θ(1) 不过,对于一个指定的关键...
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
最全最强!世界大学计算机专业排名总结!
我正在参与CSDN200进20,希望得到您的支持,扫码续投票5次。感谢您! (为表示感谢,您投票后私信我,我把我总结的人工智能手推笔记和思维导图发送给您,感谢!) 目录 泰晤士高等教育世界大学排名 QS 世界大学排名 US News 世界大学排名 世界大学学术排名(Academic Ranking of World Universities) 泰晤士高等教育世界大学排名 中国共...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
一个程序在计算机中是如何运行的?超级干货!!!
强烈声明:本文很干,请自备茶水!???? 开门见山,咱不说废话! 你有没有想过,你写的程序,是如何在计算机中运行的吗?比如我们搞Java的,肯定写过这段代码 public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } ...
那个在阿里养猪的工程师,5年了……
简介: 在阿里,走过1825天,没有趴下,依旧斗志满满,被称为“五年陈”。他们会被授予一枚戒指,过程就叫做“授戒仪式”。今天,咱们听听阿里的那些“五年陈”们的故事。 下一个五年,猪圈见! 我就是那个在养猪场里敲代码的工程师,一年多前我和20位工程师去了四川的猪场,出发前总架构师慷慨激昂的说:同学们,中国的养猪产业将因为我们而改变。但到了猪场,发现根本不是那么回事:要个WIFI,没有;...
为什么程序猿都不愿意去外包?
分享外包的组织架构,盈利模式,亲身经历,以及根据一些外包朋友的反馈,写了这篇文章 ,希望对正在找工作的老铁有所帮助
立即提问