近期公司需要提供支付宝支付,对于一个没有联调过支付接口的我来说可谓是头痛的死.还有找到支付宝境外接口的技术人员, 不管咋地,多谢支付宝技术人员的解答.

首先要知道公司的pid和key.通过登录境外支付宝账号查询,key是需要支付宝的支付密码不要弄错哦.网址:https://globalprod.alipay.com/transaction/fpTransInfo.htm

你可以到网上找客户叫他们给你旺旺号码发demo给你:

支付宝跨境支付PC网站接口: https://os.alipayobjects.com/others/create_forex_trade.zip
支付宝跨境支付无线网站(H5/WAP)接口:https://os.alipayobjects.com/others/cross-border_mobile_payment.zip
支付宝跨境支付APP接口:https://os.alipayobjects.com/others/cross-border_SDK_payment.zip

请求参数可以去查看pdf文档,记住不要把签名和签名类型这两个参数,添加到生成要签名的集合里面去--->生成求情url:请求参数是什么意思,请查看相关pdf,改文档里面描述了请求参数和请求URL的格式以及返回的code含义.请求接口/支付宝网关可以去询问支付宝相关技术支持,我这里就不贴出来了

 1 /**
 2      * 创建请求支付宝的URL
 3      * @param paygateway 支付宝连接
 4      * @param service 支付宝服务接口
 5      * @param sign_type 签名方式(加密类型)
 6      * @param out_trade_no 境外商户交易号
 7      * @param input_charset 编码
 8      * @param partner 境外商户支付宝ID
 9      * @param key
10      * @param body 描述
11      * @param total_fee 交易金额
12      * @param currency 币种
13      * @param subject 商品名称
14      * @param notify_url支付成功的回调路径   个人觉得notify_url与return_url都相差无几
15      * @param return_url支付成功的回调路径
16      * @return
17      */
18     public static String createUrl(String paygateway, String service, String sign_type,
19             String out_trade_no,String input_charset,
20             String partner,String key,
21             String body, String total_fee, String currency,
22             String subject ,String notify_url,
23             String return_url) {
24
25         Map<String,Object> params = new HashMap<String,Object>();
26         params.put("service", service);
27         params.put("partner", partner);
28         params.put("subject", subject);
29         params.put("body", body);
30         params.put("out_trade_no", out_trade_no);
31         params.put("rmb_fee", total_fee);//表示商品的标价是人民币,具体参考pdf
32 //        params.put("total_fee", total_fee);
33         params.put("currency",currency);
34         params.put("return_url", return_url);//这两个url是需要外网能够访问的
35         params.put("notify_url", notify_url);//需要外网能够访问的
36         params.put("_input_charset", input_charset);
37
38         String prestr = "";
39
40         prestr = prestr + key;
41         //System.out.println("prestr=" + prestr);
42
43         String sign = DigestUtils.md5Hex(getContent(params, key));//生成签名
44         String parameter = "";
45         parameter = parameter + paygateway;
46
47         List<Object> keys = new ArrayList<Object>(params.keySet());
48         for (int i = 0; i < keys.size(); i++) {
49             try {
50                 parameter = parameter + keys.get(i) + "="
51                             + URLEncoder.encode((String) params.get(keys.get(i)), input_charset) + "&";
52             } catch (UnsupportedEncodingException e) {
53
54                 e.printStackTrace();
55             }
56         }
57
58         parameter = parameter + "sign=" + sign + "&sign_type=" + sign_type;
59
60         return parameter;
61
62     }

 1  /**
 2      * 把集合拼接成请求参数
 3      * @param params 请求参数集合
 4      * @param privateKey 公司key
 5      * @return
 6      */
 7     private static String getContent(Map params, String privateKey) {
 8         List keys = new ArrayList(params.keySet());
 9         Collections.sort(keys);
10
11         String prestr = "";
12
13         for (int i = 0; i < keys.size(); i++) {
14             String key = (String) keys.get(i);
15             String value = (String) params.get(key);
16
17             if (i == keys.size() - 1) {
18                 prestr = prestr + key + "=" + value;
19             } else {
20                 prestr = prestr + key + "=" + value + "&";
21             }
22         }
23 //        String p = prestr + privateKe+"&forex_biz=\"FP\"";
24         String p = prestr+privateKey;
25         System.out.println(p);
26         return p;
27     }

拿到这个请求url你可以用A标签或者用httpclient访问httpclient可以查看境外支付宝报关接口对接博客.(有些情况是不能使用httpclient,比如使用国内的支付宝即时到账功能不能使用httpclient)

支付宝支付成功后回调的URL,支付成功的消息都在请求里面:trade_status状态等于TRADE_FINISHED的时候才算支付成功(这里是return_url,适用于提供给用户显示,notify_url适用于做自己的业务逻辑,记住,如果成功了要先支付宝发送成的消息,看下面的return_url)

public ModelAndView payResult(HttpServletRequest request){ModelAndView model = new ModelAndView();Map<String,String> params = new HashMap<String,String>();@SuppressWarnings("rawtypes")Map requestParams = request.getParameterMap();for (@SuppressWarnings("rawtypes")Iterator 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] + ",";try {valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch block
                    e.printStackTrace();}}params.put(name, valueStr);}//乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化try {//获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以下仅供参考)////订单外币金额String total_fee = new String(request.getParameter("total_fee").getBytes("ISO-8859-1"),"UTF-8");//清算币种String currency = new String(request.getParameter("currency").getBytes("ISO-8859-1"),"UTF-8");//商户订单号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");System.out.println("支付宝交易号:___"+trade_no);//交易状态String trade_status = new String(request.getParameter("trade_status").getBytes("ISO-8859-1"),"UTF-8");System.out.println("交易状态:___"+trade_status);if(StringUtils.isNotBlank(trade_status) && "TRADE_FINISHED".equals(trade_status)){model.setViewName("pay/pay_success");model.addObject("message", "支付成功!");AlipayNotify.verify(params);//这个是demo里面的方法, 下载上面的demo就有该类,就不贴出来了String responseTxt = "true";if(params.get("notify_id") != null) {String notify_id = params.get("notify_id");responseTxt = AlipayNotify.verifyResponse(notify_id);}String sign = "";if(params.get("sign") != null) {sign = params.get("sign");}boolean isSign = AlipayNotify.getSignVeryfy(params, sign);//写日志记录(若要调试,请取消下面两行注释)String sWord = "responseTxt=" + responseTxt + "\n isSign=" + isSign + "\n 返回回来的参数:" + AlipayCore.createLinkString(params);Logger.getLogger(this.getClass().getName()).info(sWord);Map<String,String> paramMap = new HashMap<String,String>();paramMap.put("orderNu", out_trade_no);paramMap.put("payNu", trade_no);orderService.updateAliOrderStatus(paramMap);//         PrintWriter out = response.getWriter();//         out.print("success");//这段代码是在notify_url的地址中,我这里是没有贴notify_url了} else {model.setViewName("pay/pay_fail");model.addObject("message", "支付失败!");       //  PrintWriter out = response.getWriter();//这段代码是在notify_url的地址中,我这里是没有贴notify_url了         //out.print("fail");
            }} catch (UnsupportedEncodingException e) {e.printStackTrace();}return model;}

调用:

 1 // String paygateway    =    "https://openapi.alipaydev.com/gateway.do?";    //支付宝测试环境
 2 String paygateway     =    "https://mapi.alipay.com/gateway.do?";    // 支付宝正式环境
 3 String service      = "create_forex_trade";//接口名称
 4 String sign_type       =   "MD5";//签名方式
 5 String out_trade_no        = orderDTO.getOrderCode();    //本地系统订单号()
 6 String input_charset   =  "utf-8";
 7 // String partner            =    "2088101122136241"; //测试环境pid
 8 String partner            =    ""; //pid
 9 // String key             =    "760bdzec6y9goq7ctyx96ezkz78287de"; //测试环境的key
10 String key             =    ""; //商户key
11 String body    = "";//商品描述
12 if(orderDetails != null && orderDetails.size() > 1){
13     body = orderDetails.get(0).getProductName()+"等多件"; //trade description
14 } else {
15      body = orderDetails.get(0).getProductName(); //trade description
16 }
17 // String total_fee            = "1";                 //range is 0.01~1000000.00
18 String total_fee            = (String)request.getSession().getAttribute("sumPriceForAli");//支付金额
19 String currency     =  "USD";//币种
20 String subject = "";//商品名称
21 if(orderDetails != null && orderDetails.size() > 1){
22     subject= orderDetails.get(0).getProductName()+"等多件";             //
23 } else {
24     subject= orderDetails.get(0).getProductName();         //
25 }
26 String notify_url        = "";     //异步通知,可以理解为后台处理逻辑程序
27 String return_url        = "http://m.uecun.com/uec/pay/payResult";    // 同步通知,可以理解为前台页面显示给用户看的
28 String ItemUrl=Payment.createUrl(paygateway,service,sign_type,out_trade_no,input_charset,partner,key,body,total_fee,currency,subject,notify_url,return_url);

这段代码,我是写在jsp里面的, 当然可以改写,Payment类的createUrl方法就是第一段代码,其他验证签名的方法和类可以下载上面链接。

转载于:https://www.cnblogs.com/cunkouzh/p/5640540.html

境外支付宝接口对接--支付接口相关推荐

  1. 对接支付宝手机网站支付接口,alin10071

    最近项目要增加支付宝扫二维码实现h5支付的功能,我们采用了调用支付宝手机网站支付接口:alipay.trade.wap.pay 但是每次调起返回都是 无可用支付方式 测了一天才发现是因为我的支付宝余额 ...

  2. 如何申请与对接支付接口

    支付接口,通常会有多种语言形式的,根据对应网站程序语言提供对应的支付接口程序以及对接说明文档 支付接口,有API形式.SDK集成形式等 从源码语言分有PHP支付接口,ASP支付接口,net支付接口,C ...

  3. 西米支付:数字藏品支付通道,数字藏品对接支付接口相关知识(供参考)

    自2021年年末开始,数字藏品在我国持续火爆,数藏交易平台的数量已经达到500多家,而且还在以惊人的速度快速增多,剧测算,2026年我国数字藏品市场规模将达300亿元,众多互联网公司纷纷入局. 而构建 ...

  4. 搞定支付接口(一) 支付宝即时到账支付接口详细流程和代码

    搞定支付接口(一) 支付宝即时到账支付接口详细流程和java代码 为避免你们和我一样被支付接口搞得焦头烂额,写一个从申请开始到能收到钱为止的详细教程,实际上各个语言都可以用来集成支付接口,我用java ...

  5. 11.9支付宝线上支付接口使用

    2018-11-9 14:07:40 支付宝线上支付接口使用 放上github连接: https://github.com/TrueNewBee/pythonDemo/blob/master/Alip ...

  6. 第三方支付接口 个人第三方支付接口 第三方支付接口费率

    第三方支付接口 个人第三方支付接口 第三方支付接口费率 支付扫码是现在很多人日常都会有的一个行为,不管是去超市.饭店还是其他地方消费的话都会打开微信扫描商家提供的收款码.不过有很多商家和消费者就发现微 ...

  7. 关于对接支付接口遇到的问题(微信和支付宝)

    目录 前言 问题 支付场景非法或请在微信外打开订单 微信公众号支付 错误chooseWXPay:fail, the permission value is offline verifying 其他支付 ...

  8. java 支付宝h5网页支付接口,移动端h5网页调用支付宝支付接口

    领导第一次让我做h5支付宝支付的时候,去了支付宝开放平台,一顿上上下下左左右右,看完了长呼一口气.这个支付好像没我啥事儿啊!小伙伴儿们自行查看:https://opendocs.alipay.com/ ...

  9. abc云支付php,凉秋易支付,免签约支付平台,彩虹易支付,abc云支付云钱包,云支付,云结算,支付接口,支付营销,易支付,微信支付,支付宝,QQ钱包,个人支付接口,免签支付接口...

    支付接口介绍 使用此接口可以实现支付宝.QQ钱包.微信支付与财付通的即时到账,免签约,无需企业认证.接口API地址是:http://pay.lqan.cn/ 本文阅读对象:商户系统(在线购物平台.人工 ...

  10. java调用支付宝扫码支付接口

    说明: 由于没有商户账号,所以本文使用的是沙箱账号,本质跟真实账号是一样的,是支付宝为了方便开发人员开发调试而推出的策略.在真实开发中将商户公钥等修改为真实的商户即可. 支付基本流程 用户下单 商户账 ...

最新文章

  1. 【控制】复杂度定义及计算
  2. Java 进程占用 VIRT 虚拟内存超高的问题研究
  3. MongoDB非关系型数据库开发手册
  4. 实战:基于RabbitMQ的TTL以及死信队列,实现延迟付款,手动补偿案例
  5. linux c语言 utf8读写,关于在C程序中处理UTF-8文本的方法详解
  6. 20道你必须要背会的微服务面试题,面试一定会被问到
  7. uni-app项目利用HBuilder X工具使用命令一键自动编译导出APP资源
  8. 项目进度管理之三点估算法
  9. opengl 3D平衡球小游戏
  10. 2022年西式面点师(初级)考试题库及模拟考试
  11. 关于纹理勾选sRGB的疑惑
  12. Hibernate持久化对象生命周期之实战探索
  13. iPhone用android充电头,iPhone 6s用什么充电头充电最快?安卓快充头可以混用吗?
  14. matlab 矩阵平均值
  15. jsp实现一个简单的登陆界面(不连数据库)
  16. 7-3 馅馅馅饼 (20 分)
  17. git squash
  18. arduino 舵机接线图_(四)arduino进阶:舵机的使用方法
  19. 无线网卡在 MAC 系统下的安装与使用过程
  20. locust压测工具【学习】

热门文章

  1. 简体字和繁体字转换四种方法
  2. 422串口线互连的接法
  3. 游戏建模学习技巧分享
  4. ibm 的java实现_IBM Java Toolbox for 实现IBM i 消息通信
  5. 使用驱动器中的光盘之前需要将其格式化怎么弄
  6. Redis 分布式并发防止脏读
  7. 使用mbw测试内存带宽性能
  8. 微信开发者工具整个是个浏览器
  9. E大调第一个指型_初学吉他大调与对应小调的知识,看完这个就懂了
  10. arduino uno连接超声波传感器测距