alipay支付返回form,异步调取,当subject属性有中文时请求出现错误

开发支付宝支付,现在由后端返回的是一串html代码,也就是form表单,我展示的方式是
先开一个新得浏览器窗口,再将这段代码写入,具体如下:

             const newTab = window.open();
    const div = document.createElement('div');
    div.innerHTML = res.data;
    newTab.document.body.appendChild(div);
    newTab.document.forms[0].submit();

            但是这种就会出现验签失败现象;

            经过排查,是由于支付宝支付的一个参数subject中有中文,发现我传过去的参数是经过gb2312编码,但是支付宝解码是utf-8解码,所以会出现中文乱码报错的现象!!!!

            但是,在新开的页面加上“<meta http-equiv="Content-Type" content="text/html; charset=utf-8">”也是没用的。
            而且我在原有的页面上加上那段form代码执行就不会报错,会按照utf-8编码,但是用window.open()新开页面就会报错。

            请各位大神帮帮忙,谢谢!!!!

2个回答

对中文调用encodeURI做一个urlencode编码 https://blog.csdn.net/zhangge360/article/details/51954653

我是搞前端的,在前端也可以对支付宝返回的表单进行调用吗?还是前后端都要做修改才行

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
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; }

关于支付系统中同步通知和异步通知时什么为什么需要同步通知和异步通知

在电商发起订单支付中到支付系统支付完成之后 为什么需要发送同步通知或者异步通知,什么是同步通知什么又是异步通知,请大神赐教!

支付宝手机网站支付(Java),异步通知有时成功,有时不成功

![![图片说明](https://img-ask.csdn.net/upload/201704/06/1491463421_471688.png)图片说明](https://img-ask.csdn.net/upload/201704/06/1491463410_962538.png)

支付宝自动返回商户404界面

是论坛充值金币的程序 测试的时候,支付完全没问题,就是返回商户的时候,跳转到我的网址,是404页。。 ![图片说明](https://img-ask.csdn.net/upload/201704/20/1492658512_119089.png) ![图片说明](https://img-ask.csdn.net/upload/201704/20/1492658618_556847.png) ![图片说明](https://img-ask.csdn.net/upload/201704/20/1492658520_778352.png) ![图片说明](https://img-ask.csdn.net/upload/201704/20/1492658537_801623.png) ![图片说明](https://img-ask.csdn.net/upload/201704/20/1492658551_318202.png) ![图片说明](https://img-ask.csdn.net/upload/201704/20/1492658561_763916.png) 然后网址栏里,是一长串字符串,字符串的内容是订单号、买家信息、卖家信息、金额之类的信息. ![图片说明](https://img-ask.csdn.net/upload/201704/20/1492658582_683976.png) ![图片说明](https://img-ask.csdn.net/upload/201704/20/1492658608_46602.png)

支付宝扫码支付完成后如何跳转跳转页面

最近在做pc端的支付宝支付 现在有一个问题 就是扫码完成支付后支付宝提示正在跳转商户页面 然后就是跳转到指定的页面 但是如何才能把这个页面设置上然后在支付宝提示跳转商户页面后就 跳转到我指定的页面 本来想在回调的方法上加上打开页面的方法 但是只能获取到系统指定的浏览器 不能再当前页面刷新 问一下大佬如何配置或者是方法可以把这个页面弄上去然后支付宝调=提示跳转商户页面后就会刷新跳转到我指定的页面

自动提交form的问题

项目中需要集成支付宝接口 发送数据手动提交的时候正常的 但是需要自动提交 就是打开页面自动提交form到支付宝就没反应了 这是支付页面的表单: [code="html"] <form id="payform" name="payform" action="http://www.alipay.com/cooperate/gateway.do?_input_charset=utf-8" method="POST" target="_blank"> <input type="hidden" name="body" value="用于测试的商品" /> ...等等 一系列订单信息.... <input type="submit" name="submit" value="马上支付" /> </form> <script>document.payform.submit();</script> [/code] 手动点击"马上支付"的时候,订单可以正确提交 但是<script>document.payform.submit();</script>这个自动提交form的脚本却不能自动提交. 需要打开这个页面就自动提交form 请问,问题出在哪里? 测试的浏览器是safari.

支付宝接口调用报错,不知道是什么原因,各位大神帮忙看看呢

![图片说明](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);

支付宝退款退款成功返回信息后校验sign报错

发送给支付宝之后返回的信息是正确的,可是报com.alipay.api.AlipayApiException: com.alipay.api.AlipayApiException: sign check fail: check Sign and Data Fail!错误 try { //实例化客户端 AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", AlipayConfig.app_id, AlipayConfig.private_key_RSA2, "JSON", AlipayConfig.input_charset, AlipayConfig.public_key_RSA2, "RSA2"); //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.open.public.template.message.industry.modify AlipayTradeRefundRequest req = new AlipayTradeRefundRequest (); Map<String,Object> map = new HashMap<String, Object>(); map.put("out_trade_no",order.getOrderId()); map.put("refund_amount",order.getBackMoney().doubleValue()); map.put("out_request_no",order.getBackId()); JSONObject jsonObject = JSONObject.fromObject(map); //SDK已经封装掉了公共参数,这里只需要传入业务参数 //此次只是参数展示,未进行字符串转义,实际情况下请转义 req.setBizContent(jsonObject.toString()); AlipayTradeRefundResponse response = alipayClient.execute(req); //调用成功,则处理业务逻辑 System.out.println("返回结果"+response.toString()); if(response.isSuccess()){ return true; //..... } }catch (Exception e){ log.error("alipay backPayInfo",e); } return false;

PC端支付宝支付支付支付支付支付

pc端支付界面二维码是支付宝返回的,支付界面是由自己的系统写的吗

C# .net用controll如何通知支付宝交易成功

我用的MVC框架,"notifyurl"卸载Controll中,用接口调用的方式提供给支付宝做POST请求,能收到支付宝返回的支付信息,但数据处理之后,使用“Response.Write("success")”无法使支付宝继续回调该url。 我该如何处理? 大概代码如下: ```if (HttpContext.Current.Response.Form["trade_status"] == "TRADE_SUCCESS") { //这里写支付成功处理逻辑 //逻辑处理完成,告诉支付宝处理成功 HttpContext.Current.Response.Write("success"); //然而这里.Response.Write过去之后,支付宝还是会一如既往的回调url,知道满25个小时8次调用之后停止。 } ``` 请问各位大神有没有遇到这种情况,该如何处理?

求大神分析支付宝支付回调的问题

我在做支付宝即时到账的功能,现在遇到一个问题:在我的机子上用外网测试的扫码支付功能,支付成功后回调到我的action,是直接打开登录后的网页界面。可是放到阿里云服务器里,再次测试的时候,就会被拦截掉,直接跳转到登录页面,需要再次登录,这是为什么?拦截器已经放开对action的拦截了,想不明白为什么?

支付宝接口alipay.trade.create参数问题

![图片说明](https://img-ask.csdn.net/upload/201611/29/1480411622_278583.png) 如图所示,构造函数里第3个参数privateKeyPem我的理解是openssl生成的rsa_private_key.pem,那么第7个参数alipayPulicKey是什么东西,如何找到它,第8个参数encyptKey是干什么的。 搞这个感觉好无力,api我是有看的,但出问题我就不知道如何解决了,求各位路过的大神拉我一把。

支付宝沙箱测试支付成功后,跳转回调界面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; } }

关于支付宝接口alipay.trade.precreate的签名,我总是验证错误

``` private void pay() throws Exception{ SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date=new Date(); HttpURLConnection u=(HttpURLConnection) new URL(SettingEntiry.getOpenApiDomain()).openConnection(); u.setRequestMethod("POST"); u.setDoInput(true); u.setDoOutput(true); String sign=URLEncoder.encode(SignUtils.sign(Entity.inputEntity(SettingEntiry.getAPPID(),"ALIPAY.TRADE.PRECREATE","UTF-8","RSA",sdf.format(date),"1.0",BizContentEntiry.intputBizContentEntity("1000000","0.01","这是外卖")).toString2(),SettingEntiry.getPrivateKey()),"utf-8"); PrintWriter pw=new PrintWriter(u.getOutputStream()); pw.print(Entity.inputEntity(SettingEntiry.getAPPID(),"ALIPAY.TRADE.PRECREATE","UTF-8","RSA",sign.toUpperCase(),sdf.format(date),"1.0",BizContentEntiry.intputBizContentEntity("1000000","0.01","这是外卖")).toString()); pw.flush(); pw.close(); System.out.println(URLEncoder.encode(SignUtils.sign("timestamp=2016-03-22%2018:05:30&method=alipay.trade.precreate&app_id=2015051100069126&sign_type=RSA&version=1.0&biz_content=%20{%20\"out_trade_no\":\"20150320010101001\",%20\"seller_id\":\"2088102146225135\",%20\"total_amount\":88.88,%20\"discountable_amount\":8.88,%20\"undiscountable_amount\":80,%20\"buyer_logon_id\":\"15901825620\",%20\"subject\":\"Iphone6%2016G\",%20\"body\":\"Iphone6%2016G\",%20\"goods_detail\":[{%20\"goods_id\":\"apple-01\",%20\"alipay_goods_id\":\"20010001\",%20\"goods_name\":\"ipad\",%20\"quantity\":1,%20\"price\":2000,%20\"goods_category\":\"34543238\",%20\"body\":\"特价手机\"%20}],%20\"operator_id\":\"yx_001\",%20\"store_id\":\"NJ_001\",%20\"terminal_id\":\"NJ_T_001\",%20\"extend_params\":{%20\"sys_service_provider_id\":\"2088511833207846\"%20},%20\"timeout_express\":\"90m\",%20\"royalty_info\":{%20\"royalty_type\":\"ROYALTY\",%20\"royalty_detail_infos\":[{%20\"serial_no\":1,%20\"trans_in_type\":\"userId\",%20\"batch_no\":\"123\",%20\"out_relation_id\":\"20131124001\",%20\"trans_out_type\":\"userId\",%20\"trans_out\":\"2088101126765726\",%20\"trans_in\":\"2088101126708402\",%20\"amount\":0.1,%20\"desc\":\"分账测试1\"%20}]%20}%20}",SettingEntiry.getPrivateKey()),"Utf-8")); System.out.println(Entity.inputEntity(SettingEntiry.getAPPID(),"ALIPAY.TRADE.PRECREATE","UTF-8","RSA",sign.toUpperCase(),sdf.format(date),"1.0",BizContentEntiry.intputBizContentEntity("1000000","0.01","这是外卖")).toString()); System.out.println(sign); BufferedInputStream bis=new BufferedInputStream(u.getInputStream()); byte[] b=new byte[32*1024]; int r=0; while((r=bis.read(b))!=-1){ System.out.println(new String(b,0,r)); } bis.close(); } ``` 返回的是 {"ALIPAY_TRADE_PRECREATE_response":{"code":"40002","msg":"Invalid Arguments","sub_code":"isv.invalid-signature","sub_msg":"无效签名"},"sign":"pKAZjddvi+mJDIJnopTjVuwG3yoNc8JKW6HvjZ9v5GQ551NAhuIIJjL1cvAm6Llxxbjm9bYRNWRR0LJsXLaxYKzpymJNOZ0WcZtqcHmTaBzdII/G5boGLQaSl347pywft04Vb/0oeKBuEekqzPXQIma+iBXbK9GP0i5qghxTGHg="} 是签名算法的问题吗,我用的是支付宝demo WS_MOBILE_PAY_SDK_BASE里面看到 的签名算法 [支付宝demo](http://aopsdkdownload.cn-hangzhou.alipay-pub.aliyun-inc.com/demo/WS_MOBILE_PAY_SDK_BASE.zip?spm=a219a.7629140.0.0.R5lLRu&file=WS_MOBILE_PAY_SDK_BASE.zip "") 我的程序:https://yunpan.cn/cYNsy3DbDib2Q (提取码:ae5b)

我调用他们写的支付宝接口,加载支付宝页面时返回“ 错误码:INVALID_PARAMETER”,

我调用他们写的支付宝接口,加载支付宝页面时返回“ 错误码:INVALID_PARAMETER”,请问是我调用的原因还是接口的问题。

Android webview里调用 支付宝接口

做的程序是Android框架嵌套js 用webview来加载这些页面,现在在webview里面点击支付时的时候, 会跳转到一个PC版的页面进行支付,这个功能在PC上是正常的。 现在嵌套在Android里的时候 ,经常出现无法登陆,扫码支付后不能返回的现象。 所以决定用支付宝的接口。 https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.t8Z1SV&treeId=59&articleId=104669&docType=1 就是这种介入方式,里面有个方法接口fetchOrderInfoFromH5PayUrl # 接口功能 # # 从拦截的URL中获取支付请求相关信息,封装成新的订单信息字符串作为返回值。如果该URL不是有效的支付宝支付URL,则返回空字符串。 但是现在这个我总是不能拦截到自己支付地址,还是会跳转到PC版的页面,想要的结果是可以直接底部弹出来支付框(有安装支付宝APP的时候),没有装的话是转到H5的页面中。 这个接入需要申请什么权限吗,我看官方demo里这种方式没有用到, 看到的朋友 可以指点一下吗,第一次集成支付宝 非常迷茫,项目快上线了,这个功能以及纠缠我好多天了,在线等

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\""; } }

APP支付宝支付提示“系统繁忙,请稍后再试”是什么原因?

APP支付宝支付提示“系统繁忙,请稍后再试”是什么原因呢?我的请求字符串是: charset=utf-8&biz_content=%7B%22body%22%3A%22%E7%BC%B4%E6%9C%8D%E5%8A%A1%E8%B4%B9%22%2C%22subject%22%3A%22%E4%BA%BA%E4%BA%8B%E5%B7%A5%E8%B5%84%E6%95%B0%E6%8D%AE%E5%BA%93%E7%AE%A1%E7%90%86%E7%B3%BB%E7%BB%9F%E6%9C%8D%E5%8A%A1%E8%B4%B9%22%2C%22out_trade_no%22%3A%22JF191030085023481850%22%2C%22timeout_express%22%3A%2230m%22%2C%22total_amount%22%3A%220.02%22%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%7D&method=alipay.trade.app.pay&notify_url=http%3A%2F%2Fwww.bjdsst.com%2FSystemShop%2FAlipay%2FMobile%2Fnotify_url.aspx&app_id=2019022263313248&sign_type=RSA2&version=1.0&timestamp=2019-10-30+10%3A02%3A18&sign=EVqgVbGbB2t7qYR5A8%2B5E6LwADYGIC21UTpTjwNiMiYxr%2BJ1RWJ6TL9WLDniRfpnFoHg4sbxEN2MZpVbOQnD5oVnIDHZaoxGgnqfSfdHKLKZPOJ5W65GNKoAPxYp2CJHd8fD%2Ft%2FGHLVcknFIHUdTrdus3oeYiAn8MH2PsDevLbI%3D

接入支付宝授权登录,报系统异常,请稍后再试(resultcode:4000).

![图片说明](https://img-ask.csdn.net/upload/202002/18/1581996119_905390.jpg) 如图中所示,跳转至支付宝之后显示系统异常,捕捉回调的时候resultcode是4000, memo是:系统异常请稍后再试,用于授权的信息如下: apiname=com.alipay.account.auth&app_id=2019052965369662&app_name=mc&auth_type=AUTHACCOUNT&biz_type=openservice&method=alipay.open.auth.sdk.code.get&pid=2088531207634483&product_id=APP_FAST_LOGIN&scope=kuaijie&sign_type=RSA2&target_id=52201d6f-69e0-48ac-9122-554c04b60884&sign=XEsNCoq5LQGPup4TIdkUFp9hfQ8GI8waJZqVcwcXCs3qS6hP/nFKsi1rqMKMVVH37x8cxQVBnVeywJDEJX4XIIDW4gCZzpFqH/0mmD9ihYunsNi/sYvyt3CYRxLLKct2qWYVh3cxNbC4l/f0FykNrS7uNe+Z+1lMc8Cg8T3wSm6OJ1R2XVKLDTMVFz+2IyoAdLY7AQI8AEw4k6iOuvswXfY3RoLB8fw2Z7s/xhIYtj1MWou4hkabcjATryGYVfk68yZExxeSjkKO/osUX8rZBNh88cbz6Plypki/avqOGM+8n6hNjeMtGQKaZ2UBrKE1zTuis5yV1GUC64nLhEQhcw== 已经在网上搜了一大圈了,从昨晚到现在一支没解决,有同学遇到过类似的问题吗? 谢谢!

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

Intellij IDEA 实用插件安利

1. 前言从2020 年 JVM 生态报告解读 可以看出Intellij IDEA 目前已经稳坐 Java IDE 头把交椅。而且统计得出付费用户已经超过了八成(国外统计)。IDEA 的...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

总结了 150 余个神奇网站,你不来瞅瞅吗?

原博客再更新,可能就没了,之后将持续更新本篇博客。

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

魂迁光刻,梦绕芯片,中芯国际终获ASML大型光刻机

据羊城晚报报道,近日中芯国际从荷兰进口的一台大型光刻机,顺利通过深圳出口加工区场站两道闸口进入厂区,中芯国际发表公告称该光刻机并非此前盛传的EUV光刻机,主要用于企业复工复产后的生产线扩容。 我们知道EUV主要用于7nm及以下制程的芯片制造,光刻机作为集成电路制造中最关键的设备,对芯片制作工艺有着决定性的影响,被誉为“超精密制造技术皇冠上的明珠”,根据之前中芯国际的公报,目...

优雅的替换if-else语句

场景 日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段: 优先判断条件,条件不满足的,逻辑及时中断返回; 采用策略模式+工厂模式; 结合注解,锦...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

2020阿里全球数学大赛:3万名高手、4道题、2天2夜未交卷

阿里巴巴全球数学竞赛( Alibaba Global Mathematics Competition)由马云发起,由中国科学技术协会、阿里巴巴基金会、阿里巴巴达摩院共同举办。大赛不设报名门槛,全世界爱好数学的人都可参与,不论是否出身数学专业、是否投身数学研究。 2020年阿里巴巴达摩院邀请北京大学、剑桥大学、浙江大学等高校的顶尖数学教师组建了出题组。中科院院士、美国艺术与科学院院士、北京国际数学...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

Python爬虫,高清美图我全都要(彼岸桌面壁纸)

爬取彼岸桌面网站较为简单,用到了requests、lxml、Beautiful Soup4

差点跪了...

最近微信又搞出了一个大利器,甚至都上了热搜,当然消息最敏捷的自媒体人,纷纷都开通了自己的视频号。01 视频号是什么呢?视频号是微信体系内的短视频,它不同...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

Vue回炉重造之router路由(更新中)

你好,我是Vam的金豆之路,可以叫我豆哥。2019年年度博客之星、技术领域博客专家。主要领域:前端开发。我的微信是 maomin9761,有什么疑问可以加我哦,自己创建了一个微信技术交流群,可以加我邀请你一起交流学习。最后自己也创建了一个微信公众号,里面的文章是我自己精挑细选的文章,主要介绍各种IT新技术。欢迎关注哦,微信搜索:臻美IT,等你来。 欢迎阅读本博文,本博文主要讲述【】,文字通...

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

Java岗开发3年,公司临时抽查算法,离职后这几题我记一辈子

前几天我们公司做了一件蠢事,非常非常愚蠢的事情。我原以为从学校出来之后,除了找工作有测试外,不会有任何与考试有关的事儿。 但是,天有不测风云,公司技术总监、人事总监两位大佬突然降临到我们事业线,叫上我老大,给我们组织了一场别开生面的“考试”。 那是一个风和日丽的下午,我翘着二郎腿,左手端着一杯卡布奇诺,右手抓着我的罗技鼠标,滚动着轮轴,穿梭在头条热点之间。 “淡黄的长裙~蓬松的头发...

大胆预测下未来5年的Web开发

在2019年的ReactiveConf 上,《Elm in Action》的作者Richard Feldman对未来5年Web开发的发展做了预测,很有意思,分享给大家。如果你有机会从头...

立即提问
相关内容推荐