/*** 商户编号*/@Value("${sdpay.merch_mid}")private String merchMid;/*** 商户密钥*/@Value("${sdpay.mer_key}")private String merKey;/*** 回调地址*/@Value("${sdpay.notify_url}")private String notifyUrl;/*** 商户密钥*/@Value("${sdpay.merprivate_key}")private String meprivateKey;@Overridepublic ResponseData  createOrder(RepaychargeReq repaychargeReq, UserVo userVo) {// 参考文档:body 前面这些是必须需要签名的所以放在签名Map<String, String> body = new HashMap<>();Date date = new Date();SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddHHmmss");//时间转换格式body.put("version", "1.0"); // 版本号body.put("mer_no",merchMid);//商户编号body.put("mer_key",merKey);//商户密钥body.put("mer_order_no",repaychargeReq.getOrderId());//订单号body.put("create_time",sdf.format(date));//创建时间body.put("order_amt",repaychargeReq.getOrderAmt()/100+"");//订单金额body.put("notify_url",notifyUrl);//回调地址body.put("return_url","");//支付后返回的商户显示页面 没有就填 “”body.put("create_ip",repaychargeReq.getCreateIp().replace(".","_"));//转换IP地址body.put("store_id","000000");//门店号JSONObject jsonObject = new JSONObject(); // 支付扩展域 内容字段
//        jsonObject.put("wx_app_id",sandpayConf.getWxappid()); //appid
//        jsonObject.put("gh_ori_id",sandpayConf.getWxorid()); // "gh_ori_id":"小程序原始id
//        jsonObject.put("miniProgramType","1");//jsonObject.put("cardNo","6217214402025018445");//银行卡号body.put("pay_extra",jsonObject.toString());//支付扩展域body.put("accsplit_flag","NO");//分账标识body.put("sign_type","MD5");//签名类型//       body.put("gh_static_url",sandpayConf.getWxStaticUrl()); //小程序云静态网站url" 如果是小程序支付,一定要加上,不然支付请求就看不到了,直接问领导拿try {// 报文签名String reqSign = sadeSign(body);body.put("sign",reqSign);//MD5签名结果body.put("goods_name",repaychargeReq.getGoodsName());//商品名称body.put("expire_time",endTime(date));//失效时间body.put("product_code",repaychargeReq.getProductCode());//  支付产品,多个以英文逗号分隔,具体产品见产品编码文档body.put("clear_cycle","0");//清算模式body.put("jump_scheme","sandcash://scpay");
//            Map<String, Object> metaOption = new HashMap<>();JSONObject metaOption = new JSONObject();//app需要封装值不用动metaOption.put("s","Android");metaOption.put("n","");metaOption.put("id","");metaOption.put("sc","测试");body.put("meta_option",metaOption.toString());//APPRY_MIXIENET 官方的接口地址//这一段就是官方给的页面地址 拼接参数 #/alipayh5 ,弄好后,放回给客户端,让他打开地址进行支付String APPRY_MIXIENET="https://sandcash.mixienet.com.cn/pay/h5/alipaycode";String url = APPRY_MIXIENET+"?"+getUrl(body);//拼接支付地址HashMap<String, String> map = new HashMap<>();map.put("url", url);return ResponseData.success(map);} catch (Exception e) {log.error("CashierPayServlet post error <<<", e);}return null;}/*** 签名方法** @param data 待签名数据* @return* @throws Exception*/public String sadeSign(Map<String, String> data) throws Exception {if (null == data) {return null;} else {String merprivateKey = meprivateKey; //杉德的md5 keyreturn  generateSignature(data, merprivateKey);}}/*** 生成签名. 注意,若含有sign_type字段,必须和signType参数保持一致。** @param data 待签名数据* @param key API密钥* @return  String 签名* @see Exception*/public static String generateSignature(final Map<String, String> data, String key) throws Exception {Set<String> keySet = data.keySet();String[] keyArray = keySet.toArray(new String[keySet.size()]);Arrays.sort(keyArray);StringBuilder sb = new StringBuilder();for (String k : keyArray) {if (data.get(k).trim().length() > 0) // 参数值为空,则不参与签名sb.append(k).append("=").append(data.get(k).trim()).append("&");}sb.append("key=").append(key);return MD5(sb.toString());}/***** @param data 待处理数据* @return String MD5结果* @see Exception*/public static String MD5(String data) throws Exception {MessageDigest md = MessageDigest.getInstance("MD5");byte[] array = md.digest(data.getBytes("UTF-8"));StringBuilder sb = new StringBuilder();for (byte item : array) {sb.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3));}return sb.toString().toUpperCase();}public String endTime(Date creatTime){//设置生效时间为一小时后Calendar cal = Calendar.getInstance();cal.setTime(creatTime);cal.add(Calendar.HOUR, 1);// 24小时制Date effectivetime = cal.getTime();SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddHHmmss");return sdf.format(effectivetime);}public  String getUrl(Map<String, String> jsonObject) throws UnsupportedEncodingException {String paramStr = "";if (null != jsonObject) {for (String key : jsonObject.keySet()) {if (!StringUtils.isEmpty(paramStr)) {paramStr += "&";}if(key.equals("gh_static_url")){paramStr += key + "=" + jsonObject.get(key);}else{paramStr += key + "=" + URLEncoder.encode(jsonObject.get(key).toString(),"utf-8");}}}return  paramStr; //注意这里哦,如果不是微信小程序h5支付得改一下自己对应跳转的位置}

代码需要根据对接的商户信息进行配置修改

java对接杉德支付完整代码相关推荐

  1. 杉德支付php代码实现_杉德ecshop,thinkphp,shopnc在线支付接口,支付插件(payment plugin含源码)...

    最近应一个客户的要求,给他的一个ecshop网站开发杉德在线支付接口和代付接口. 杉德有自己的收银台,集成了各类银行,也是不错. 杉德支持H5,APP,网银快捷等支付接口.文档还算比较齐全. 比较有特 ...

  2. 杉德支付php代码实现_php实现微信支付的代码

    这篇文章主要介绍了关于php实现微信支付的代码,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 1: 获取code;window.location.href="https:// ...

  3. 杉德支付php代码实现_php实现小程序支付完整版

    本文实例为大家分享了php实现小程序支付的具体代码,供大家参考,具体内容如下 环境: tp3.2  + 小程序 微信支付功能开通 Step1:下载PHP 支付SDK(下载地址)  放到Library\ ...

  4. 杉德支付php代码实现_[转]PHP语言开发Paypal支付demo的具体实现

    一.paypal支付接口准备工作 首先去申请一个paypal账号,https://www.paypal.com/. 申请完毕并登录,进入https://developer.paypal.com/dev ...

  5. 【项目】关于杉德支付接口对接

    文章目录 前言 对接杉德的一键快捷支付 杉德的商家中心 代码 问题 参考文献 前言 该支付就是调用他们的支付页面,绑卡无需我们操作,所有支付操作都有他们控制.对接的支付是,一键快捷支付,参考的文档是他 ...

  6. java对接支付宝实现支付功能

    ** java对接支付宝实现支付功能 ** Controller /*** 支付功能* @return*/ @RequestMapping("/test") public Mode ...

  7. java 对接易宝支付完成真实网上支付

    java 对接易宝支付完成真实网上支付 目录结构 index.jsp界面 跳转界面 支付界面 确认界面 支付成功界面 回调界面 源码 学习资源推荐 https://blog.csdn.net/qq_4 ...

  8. 杉德支付收银台支付Demo解析,聚合支付

    文章目录 CryptoUtil工具类 CashierPaySignServlet数据处理Servlet sandPayConfig.properties 配置文件 web.xml配置 pom.xml配 ...

  9. 小程序云开发实现微信支付完整代码

    效果图: 资质 需要是已经开通了微信支付,且已绑定了商户号的小程序. 开通 在云控制台 -> 设置 -> 全局设置中开通. 二, 创建支付的云函数 1,创建云函数pay 三,引入三方依赖t ...

最新文章

  1. 动态路由选择协议(三)链路状态路由选择协议
  2. 华中科技大学 教学大纲 计算机,教学大纲-华中科技大学计算机学院
  3. Mysql的安装与远程登录
  4. [MySQL FAQ]系列 -- 数据不算大,备份却非常慢
  5. 继承中的构造函数问题
  6. Linux 索引节点 inode
  7. 亲密关系沟通-【认识需求2】-建立良好沟通环境
  8. 语音包mp3_目标明确,为运动而造 ,自带MP3功能的南卡RUNNER PRO骨传导耳机
  9. 一种修复WSL下linux系统问题的方法
  10. 根据Value对Map中的对象进行排序
  11. Android开发-之五大布局
  12. 【转】Element-UI中上传的action地址相对问题
  13. 设置eclipse中的编辑区的背景颜色、注释文字的颜色、修改注释内作者名和时间...
  14. 安卓开发必须会的技能!Android性能优化最佳实践,知乎上转疯了!
  15. python爬取喜马拉雅音频
  16. IoT僵尸网络Miori通过ThinkPHP远程代码执行漏洞进行传播
  17. OPTA 7模式测试说明
  18. ruby 读取文本_使用Ruby进行文本处理
  19. 用C语言写钢琴小程序的代码,用C语言编写钢琴小程序
  20. python词云图的生成

热门文章

  1. 比较好用的聊天交友软件?最受年轻人欢迎的APP在这
  2. fliggy 十三姨
  3. 如何将Chrome设置为默认浏览器
  4. 【题海算法】趣味算命
  5. 为自动驾驶技术服务的基础道路设施
  6. kiwix Android 地址,Kiwix 将Wikipedia下载到您的计算机或Android上以进行离线访问
  7. 学习记录596@CSS用svg做背景
  8. 利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
  9. mysql重新设置主键生成策略为auto_increment时报错:resulting in duplicate entry '1' for key 'PRIMARY'
  10. 黑马JAVA P163 字节缓冲流的性能分析