支付宝免密代扣签约SDK后台拼接(JAVA代码)

支付宝免密代扣签约SDK后台拼接(JAVA代码)

我是在做小程序时遇到的困难,在多方支持下才发现支付宝官方文档有很大的漏洞0.0,所以附上完整成功版供大家使用。开发时请结合支付宝官方免密代扣签约文档。

语言JAVA,环境SpringMVC。

此处附上正确JAVA拼接签约SDK方法。方法传入参数的是唯一标识位(我用的是用户卡号,你们随意,只要保证唯一性就可)。代码中的某些参数为你自己程序的参数,比如app_id和私钥,请自行修改。

@Override
	public Map<String, Object> createAliContractSDK(String cardNo) throws AlipayApiException, Exception {
		//模型全靠手动拼,不可用支付宝通用模型
		Map<String, Object> ret = new HashMap<>();
		//一级channel
		JSONObject acc_p = new JSONObject();
        acc_p.put("channel", "ALIPAYAPP");
        //biz_content层级(关键参数)
		Map bizModel = new HashMap<>();
		//将一级channel传入
		bizModel.put("access_params", acc_p);
		//唯一标识位,此处传入用户卡号
		bizModel.put("external_agreement_no", cardNo);
		//固定参数
		bizModel.put("personal_product_code", "GENERAL_WITHHOLDING_P");
		bizModel.put("sign_scene", "INDUSTRY|MULTIMEDIA");
		
		//拼接通用参数
		Map request = new HashMap<>();
		request.put("app_id", config.getQrAppId());
		//将biz_content层级转化为JSON格式传入
		request.put("biz_content", JSONUtil.toJSONString(bizModel));
		
		Date date = DateUtil.getAsiaDate();
		DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
		String dateString = formatter.format(date);
		request.put("timestamp",dateString);
		//request.put("timestamp","2019-06-12 14:39:02");
		request.put("sign_type", config.getSignType());
		request.put("charset", config.getCharset());
		request.put("method", "alipay.user.agreement.page.sign");
		request.put("notify_url", config.getContractNotiyfyUrl());
		//request.put("return_url", config.getContractReturnUrl());
		request.put("version", "1.0");
		//将拼好的map按ASC2码进行排序,并以key,value进行拼接
		String toSignStr = UrlUtil.getUrlParamsByMapAli(request);

        String sign = null;
        //将拼接好的字符串toSignStr进行RSA2自签名
        sign = AlipaySignature.rsa256Sign(toSignStr,config.getQrPrivateKey(), "utf-8");
        //将签名进行encode处理后再次拼接在toSignStr后面
        String orderStr = toSignStr+"&sign="+URLEncoder.encode(sign, "UTF-8");;
        //再对拼接好的完整字符串orderStr进行一次encode处理
        orderStr = URLEncoder.encode(orderStr, "UTF-8");
        //System.out.println("生成signStr:"+orderStr);
        ret.put("returnCode", "0"); 
	    ret.put("sdkParams", orderStr);  
		return ret;
	}

返回的map中sdkParams就是拼好的SDK,传回前台如何使用就看你们自行调用的接口了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值