支付宝支付之APP支付
官方文档:支付宝App支付
1.登陆支付宝开放平台,,创建应用,配置开发公,私钥,得到支付宝公钥,同时申请应用的支付权限(app支付和网页支付需要的权限不同,针对不同需求,申请对应的权限)

查看-->下载官方的公钥生成工具,把生成的私钥(使用RSA则生成1024私钥,如果是RSA2则生成2048私钥)自己保存好,公钥填写入下图对应的应用公钥中(注意区分RSA和RSA2),然后就可以看到应用宝公钥也自动生成了。

2.支付宝支付核心代码
// 支付宝支付
double total_fee=100;//支付费用
total_fee=0.01;
Map<String, String> keyValues = new HashMap<String, String>();
String current_time=Utils.getCurrentTime();//得到当前时间 yyyy-MM-dd HH:mm:ss
keyValues.put("app_id", 1200551222);//应用的appid
keyValues.put("biz_content", "{\"timeout_express\":\"30m\",\"product_code\":\"QUICK_MSECURITY_PAY\",\"total_amount\":\""+total_fee+"\",\"subject\":\""+description+"\",\"body\":\""+body+"\",\"out_trade_no\":\"" +order.getPay_num() + "\"}");
keyValues.put("charset", "utf-8");
keyValues.put("method", "alipay.trade.app.pay");
keyValues.put("sign_type", "RSA");
keyValues.put("timestamp", current_time);
keyValues.put("version", "1.0");
keyValues.put("notify_url", PayConfigUtils.getAlipay_notify_url());//支付结果通知地址
String sign=getSign(keyValues,PayConfigUtils.getPrivate_key());
String json=buildOrderParam(keyValues)+"&"+sign;
/**
* 构造支付订单参数信息
*
* @param map
* 支付订单参数
* @return
*/
public static String buildOrderParam(Map<String, String> map) {
List<String> keys = new ArrayList<String>(map.keySet());
Collections.sort(keys);
StringBuilder authInfo = new StringBuilder();
for (int i = 0; i < keys.size() - 1; i++) {
String key = keys.get(i);
String value = map.get(key);
try {
value=URLEncoder.encode(value,"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
authInfo.append(buildKeyValue(key, value, false));
authInfo.append("&");
}
String tailKey = keys.get(keys.size() - 1);
String tailValue = map.get(tailKey);
authInfo.append(buildKeyValue(tailKey, tailValue, true));
return authInfo.toString();
}
private static String buildKeyValue(String key, String value, boolean isEncode) {
StringBuilder sb = new StringBuilder();
sb.append(key);
sb.append("=");
if (isEncode) {
try {
sb.append(URLEncoder.encode(value, "UTF-8"));
} catch (UnsupportedEncodingException e) {
sb.append(value);
}
} else {
sb.append(value);
}
return sb.toString();
}
public static String getSign(Map<String, String> map, String rsaKey) {
List<String> keys = new ArrayList<String>(map.keySet());
// key排序
Collections.sort(keys);
StringBuilder authInfo = new StringBuilder();
for (int i = 0; i < keys.size() - 1; i++) {
String key = keys.get(i);
String value = map.get(key);
authInfo.append(buildKeyValue(key, value, false));
authInfo.append("&");
}
String tailKey = keys.get(keys.size() - 1);
String tailValue = map.get(tailKey);
authInfo.append(buildKeyValue(tailKey, tailValue, false));
String oriSign = SignUtils.sign(authInfo.toString(), rsaKey);
String encodedSign = "";
try {
encodedSign = URLEncoder.encode(oriSign, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return "sign=" + encodedSign;
}
3.支付参数全部得到,app下载对应的sdk,拿到已经构造好的参数,就可以直接去调起支付宝了!

浙公网安备 33010602011771号