在日常生活中,我们基本上都是进行微信与支付宝的支付方式尽心支付,这种方式确实大大便利了我们的生活,那么如何在我们的产品中进行微信与支付宝支付的植入开发呢?

我们先进行支付宝的H5与网页端支付开发,这里只进行支付宝支付的调用,关于具体的生产逻辑(例如订单之类等)大家可以根据自己的逻辑处理添加;

支付宝的开发配置地址:https://openhome.alipay.com/

进入开发者中心--->选择研发服务进行我们沙箱环境配置(测试环境)

沙箱环境会为我们提供如下信息进行仿真测试

还有我们需要的:------里面的一些秘钥,进去之后支付宝会提供我们工具,傻瓜式生成就行

接下来我们进行java程序的编码:

(1)支付宝对于一些安全的加密操作已经帮我们进行了实现,大大降低了我们开发时间需要我们Maven导入支付宝的sdk依赖 ,在官方的文档中对于支付宝各种支付实现有很好的实例,我们可以下载下来进行copy

  1. <dependency>
  2. <groupId>com.alipay.sdk</groupId>
  3. <artifactId>alipay-sdk-java</artifactId>
  4. <version>3.1.0</version>
  5. </dependency>

(2),引入我们的配置类(红色部分写入自己在支付宝后台中的配置)

  1. package com.pay.alipay.util.config;
  2.  
  3. import java.io.FileWriter;
  4. import java.io.IOException;
  5.  
  6. /* *
  7. *类名:AlipayConfig
  8. *功能:基础配置类
  9. *详细:设置帐户有关信息及返回路径
  10. *修改日期:2017-04-05
  11. *说明:
  12. *以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
  13. *该代码仅供学习和研究支付宝接口使用,只是提供一个参考。
  14. */
  15.  
  16. public class AlipayConfig {
  17.  
  18. // 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
  19. public static String app_id ="";
  20.  
  21. // 商户私钥,您的PKCS8格式RSA2私钥
  22. public static String merchant_private_key = "很长很长的字符串";
  23.  
  24. // 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
  25. public static String alipay_public_key = "很长很长的字符串";
  26.  
  27. // 服务器异步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
  28. public static String notify_url = "http://68a71d94.ngrok.io/alipay/notify";
  29.  
  30. // 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
  31. public static String return_url = "http://localhost:80";
  32.  
  33. // 签名方式
  34. public static String sign_type = "RSA2";
  35.  
  36. // 字符编码格式
  37. public static String charset = "utf-8";
  38.  
  39. // 支付宝网关
  40. //public static String gatewayUrl = "https://openapi.alipay.com/gateway.do";
  41. public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";//(沙箱环境)
  42. // public static String gatewayUrl = "https://openapi.alipay.com/gateway.do";//(正式环境)
  43. // 支付宝网关
  44. public static String log_path = "C:\\";
  45.  
  46. /**
  47. * 写日志,方便测试(看网站需求,也可以改成把记录存入数据库)
  48. * @param sWord 要写入日志里的文本内容
  49. */
  50. public static void logResult(String sWord) {
  51. FileWriter writer = null;
  52. try {
  53. writer = new FileWriter(log_path + "alipay_log_" + System.currentTimeMillis()+".txt");
  54. writer.write(sWord);
  55. } catch (Exception e) {
  56. e.printStackTrace();
  57. } finally {
  58. if (writer != null) {
  59. try {
  60. writer.close();
  61. } catch (IOException e) {
  62. e.printStackTrace();
  63. }
  64. }
  65. }
  66. }
  67.  
  68. }

(3)编写Controller层调用service层进行获取支付表单

  1. @RequestMapping(value="/alipay",method =RequestMethod.GET)
  2. public void alipay(HttpServletRequest request,HttpServletResponse response) {
  3.  
  4. String result =null;
  5. try {
  6. log.info("------->开始调用支付宝支付接口");
  7. //开始时间
  8. long starttime = System.currentTimeMillis();
  9.  
  10. result =alipay.startAlipay();
  11. log.info("alipay支付请求结束,用时:"+ (System.currentTimeMillis() - starttime) + "毫秒");
  12.  
  13. }
  14. catch(Exception e) {
  15.  
  16. e.printStackTrace();
  17. }
  18.  
  19. response.setContentType("text/html;charset=utf8");
  20. response.getWriter().write(result);//直接将完整的表单html输出到页面
  21. response.getWriter().flush();
  22. response.getWriter().close();
  23. }

 (4)建立支付所需要的实体对象entity,我们将支付参数封装在这里面,方便Json的转换

  1. package com.pay.entity;
  2.  
  3. public class PayBizContent {
  4. //商户订单号,商户网站订单系统中唯一订单号,必填
  5. private String out_trade_no;
  6. //支付金额,,必填
  7. private String total_amount;
  8. //订单名称
  9. private String subject;
  10. //商品描述
  11. private String body;
  12. private String product_code;
  13. public String getProduct_code() {
  14. return product_code;
  15. }
  16. public void setProduct_code(String product_code) {
  17. this.product_code = product_code;
  18. }
  19. @Override
  20. public String toString() {
  21. return "AlipayBizContent [out_trade_no=" + out_trade_no + ", total_amount=" + total_amount + ", subject="
  22. + subject + ", body=" + body + ", timeout_express=" + timeout_express + "]";
  23. }
  24. //订单失效时间,如果是十分钟则是10m配置;
  25. private String timeout_express;
  26. public String getOut_trade_no() {
  27. return out_trade_no;
  28. }
  29. public void setOut_trade_no(String out_trade_no) {
  30. this.out_trade_no = out_trade_no;
  31. }
  32. public String getTotal_amount() {
  33. return total_amount;
  34. }
  35. public void setTotal_amount(String total_amount) {
  36. this.total_amount = total_amount;
  37. }
  38. public String getSubject() {
  39. return subject;
  40. }
  41. public void setSubject(String subject) {
  42. this.subject = subject;
  43. }
  44. public String getBody() {
  45. return body;
  46. }
  47. public void setBody(String body) {
  48. this.body = body;
  49. }
  50. public String getTimeout_express() {
  51. return timeout_express;
  52. }
  53. public void setTimeout_express(String timeout_express) {
  54. this.timeout_express = timeout_express;
  55. }
  56.  
  57. }

 

5)service 进行调用微信SDK

  1. public String startAlipay() {
  2.  
  3. //获得初始化的AlipayClient,微信SDK提供的,直接使用即可
  4. AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl,
  5. AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json",
  6. AlipayConfig.charset, AlipayConfig.alipay_public_key,
  7. AlipayConfig.sign_type);
  8. //wap端支付
  9. AlipayTradeWapPayRequest alipayRequest=new AlipayTradeWapPayRequest();
  10. //*****************pc端支付用这个****************//
  11. //AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
  12. alipayRequest.setReturnUrl(AlipayConfig.return_url);
  13. alipayRequest.setNotifyUrl(AlipayConfig.notify_url);
  14. PayBizContent aliContent =new PayBizContent();
  15.  
  16. aliContent.setTotal_amount("1290");//金额
  17. aliContent.setSubject("辣条");//商品名称
  18. aliContent.setOut_trade_no("180458382060");//商户订单,必须是唯一的
  19. aliContent.setTimeout_express("10m");//过期时间为10m;
  20.      //**************pc端类型用这个**********************//
  21. aliContent.setProduct_code("FAST_INSTANT_TRADE_PAY");
  22.  
  23. aliContent.setProduct_code("QUICK_WAP_WAY");
  24. JSONObject json =new JSONObject();
  25. alipayRequest.setBizContent(json.toJSONString(aliContent));
  26. log.info("放入支付宝接口中的参数--->"+alipayRequest.getBizContent());
  27.  
  28. try {
  29.         //成功后返回一个form表单字符串
  30. String form = alipayClient.pageExecute(alipayRequest).getBody();
  31. log.info("AlipayServiceImpl-----调用支付宝返回结果:"+form);
  32. return form;
  33. } catch (AlipayApiException e) {
  34. log.error("AlipayServiceImpl----->支付宝生成表单错误");
  35. e.printStackTrace();
  36. return "调用失败";
  37. }
  38.  
  39. }

支付宝H5 与网页端支付开发的更多相关文章

  1. 使用 Abp.Zero 搭建第三方登录模块(三):网页端开发

    ​简短回顾一下网页端的流程,总的来说网页端的职责有三: 生成一个随机字符作为鉴权会话的临时Token, 生成一个小程序码, Token作为参数固化于小程序码当中 监控整个鉴权过程状态,一旦状态变为AU ...

  2. 移动端web开发 尽量哪些标签 常用标签及注意事项

    H5手机移动端WEB开发资源整合 常用的标签及注意事项: https://blog.csdn.net/u012118993/article/details/56023399 移动前端不得不了解的htm ...

  3. 支付宝移动支付开发详细教程服务端采用.net mvc webapi(C#)

    转自:http://www.kwstu.com/ArticleView/netmvc_201511132005431321 最近开发手机app需要实现移动支付功能,由于考虑支付安全将支付宝生成签名写到 ...

  4. 支付宝H5、APP支付服务端的区别(php)

    php支付宝H5和APP支付1.准备工作需要前往 蚂蚁金服开放平台申请https://openhome.alipay.com/developmentDocument.htm 2.大致流程1.用户添加商 ...

  5. ****基于H5的微信支付开发详解[转]

    这次总结一下用户在微信内打开网页时,可以调用微信支付完成下单功能的模块开发,也就是在微信内的H5页面通过jsApi接口实现支付功能.当然了,微信官网上的微信支付开发文档也讲解的很详细,并且有实现代码可 ...

  6. ***PHP基于H5的微信支付开发详解(CI框架)

    这次总结一下用户在微信内打开网页时,可以调用微信支付完成下单功能的模块开发,也就是在微信内的H5页面通过jsApi接口实现支付功能.当然了,微信官网上的微信支付开发文档也讲解的很详细,并且有实现代码可 ...

  7. uni-app - 支付(app支付、小程序支付、h5(微信端)支付)

    App支付.小程序支付.h5(微信端)支付 APP支付(内置) appPay.js /** * 5+App支付,仅支持支付宝以及微信支付 * * 支付宝Sdk集成,微信sdk未集成 * * @para ...

  8. H5中的微信支付、支付宝支付

    微信支付的申请: 公众号支付.扫码支付等在微信公众平台.移动端的申请在微信开放平台 公众号支付流程:申请微信公众号(服务号并完成微信认证)——申请微信支付商户号(申请微信支付,资料审核通过以后,请前往 ...

  9. 微信支付开发h5调用

    这两天做微信支付开发.碰到大坑.纠结死我了.好不容做完. 后台java:直接上代码:注意区分前后端的变量大小写... @RequestMapping(value = "/index" ...

随机推荐

  1. 容器viewController添加或者删除子viewController

    假设有一个viewControllerA,我们想在viewControllerA中添加viewControllerB,需要执行以下方法: [viewControllerA addChildViewCo ...

  2. 初识web.xml文件

    做了那么久的web项目都没有花心思了充分解下这个文件有什么用,看项目配制是否都差不多呢 ======================================================== ...

  3. 对于两个初始时设置为Sensor的刚体,不会触发preSolve和postSolve

    Main.as package{ import Box2D.Common.Math.b2Vec2; import Box2D.Dynamics.b2Body; import Box2D.Dynamic ...

  4. 0 开发的准备工作一一虚拟机virturalbox

    https://www.virtualbox.org/wiki/Linux_Downloads官网下载linux版本 https://www.ubuntu.com/desktop/developers ...

  5. JAVAWEB 一一 fmt标签 和日期插件

    fmt标签 效果 操作:  ①导入标签 <%@ taglib uri=httpjava.sun.comjspjstlfmt prefix=fmt %> ②标签这么写 <td>& ...

  6. 使用__future__实现从python2.7到python3.x的过渡

    参考链接:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386820023 ...

  7. C#中的 new Random()

    在C#中,产生随机数常用大方法是 new Random().Next(1,10)等方法. 但是仔细发现会有个问题: 看代码: ; i < ;i++ ) { Console.WriteLine(, ...

  8. monkeyrunner学习笔记

    前面部分内容转自http://blog.csdn.net/zm2714/article/details/7980634 Android自动化测试之Monkeyrunner使用方法及实例 目前andro ...

  9. for嵌套

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  10. .Net下几种ORM框架的对比

    1.Entity Framework(重量级)2.NHibernate(重量级)3.Dapper(轻量级)4.PetaPoco(轻量级)5.MyBatis.Net (介于EF和Dapper之间) 对比 ...