支付宝app支付 最终需要一个请求地址 控制层已经拼接好
首先是配置文件
package nuoshang.bluejay.common.alipay.config;
/**
* 支付宝老版本接口
*/
public class AlipayConfig {
//↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
// 合作身份者ID,以2088开头由16位纯数字组成的字符串
public static String partner = "2088421655369285";
// 商户的私钥,使用支付宝自带的openssl工具生成。
public static String private_key = "";
// 支付宝的公钥,无需修改该值
public static String ali_public_key = "";
//↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
public static final String SIGN_ALGORITHMS = "SHA1WithRSA";
public static String seller = "ynnskj@qq.com";
}
生成签名的工具类
package nuoshang.bluejay.common.alipay.sign;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.spec.PKCS8EncodedKeySpec;
/**
* 签名生成工具类 老版接口
* Created by yuhaiming on 2016/11/28 0028.
*/
public class SignUtils {
private static final String ALGORITHM = "RSA";
private static final String SIGN_ALGORITHMS = "SHA1WithRSA";
private static final String DEFAULT_CHARSET = "UTF-8";
public static String sign(String content, String privateKey) {
try {
PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(
Base64.decode(privateKey));
KeyFactory keyf = KeyFactory.getInstance(ALGORITHM);
PrivateKey priKey = keyf.generatePrivate(priPKCS8);
java.security.Signature signature = java.security.Signature
.getInstance(SIGN_ALGORITHMS);
signature.initSign(priKey);
signature.update(content.getBytes(DEFAULT_CHARSET));
byte[] signed = signature.sign();
return Base64.encode(signed);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
package nuoshang.bluejay.common.alipay.util;
import nuoshang.bluejay.common.alipay.config.AlipayConfig;
import nuoshang.bluejay.common.alipay.sign.SignUtils;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Map;
/**
* 支付宝APP 调用参数封装
* 老版本 1.0
* Created by yuhaiming on 2016/11/23 0023.
*/
public class AlipayTradeUtil {
public static String CreateOrd(String order_id, String body,String order_price){
String content = SignString(order_id,body,order_price);
String sign = GetSign(content);
try{
sign = URLEncoder.encode(sign,"utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
String url = content + "&sign=" + "\"" + sign + "\"" + "&sign_type=\"RSA\"";
return url;
}
private static String SignString(String order_id, String body,String order_price) {
// 签约合作者身份ID
String orderInfo = "partner=" + "\"" + AlipayConfig.partner + "\"";
// 签约卖家支付宝账号
orderInfo += "&seller_id=" + "\"" + AlipayConfig.seller + "\"";
// 商户网站唯一订单号
orderInfo += "&out_trade_no=" + "\"" + order_id + "\"";
// 商品名称(此处显示编号)
orderInfo += "&subject=" + "\"" + "蓝鸦商城" + "\"";
// 商品详情
orderInfo += "&body=" + "\"" + body + "\"";
// 商品金额
orderInfo += "&total_fee=" + "\"" + order_price + "\"";
// 服务器异步通知页面路径
orderInfo += "¬ify_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;
}
private static String GetSign(String content){
return SignUtils.sign(content,AlipayConfig.private_key);
}
}
控制层代码
@At("/alipay")
@Ok("json")
public Object Alipay(@Param("order_id") String order_id,
@Param("order_price") String order_price,
@Param("body") String body){
Map<String, String> requPara = new HashMap<String, String>();
String url = AlipayTradeUtil.CreateOrd(order_id,body,order_price);
requPara.put("url",url);
return ResultApp.success("success",requPara);
}
最新的支付接口 花了很多时间调试 都是各种问题
一直没有调成功 目前用这个老的接口方法能解决问题 先这样
写出了 希望能帮到需要的人