接入支付宝支付接口(一):发起支付请求-创新互联

一、前言

10年积累的网站建设、成都做网站经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有遂溪免费网站建设让你可以放心的选择与我们合作。

在接入支付宝接口之前,需要在支付宝官网进行应用注册和实名认证,地址不再贴出。

在此,贴出支付宝开放平台文档地址:https://docs.open.alipay.com/58/103585/

在这个地址中,详细介绍了如何接入支付宝接口

二、发起请求

支付宝的签名方式等不做详细介绍,在开发文档中有详细说明,笔者建议:编码格式请使用UTF-8。

接下来的介绍中,主要贴出代码(代码仅供参考)

在贴出代码之前,首先大致了解一下如何发起支付请求:

第一步:组装阿里参数

该步骤组装的参数来自于商户系统的支付信息,包括支付类型、商品名称等信息。值得注意的是,支付宝要求传入两个url,分别是异步通知和同步通知,这两个接口用于支付宝向商户系统反馈支付结果,同步为GET请求,异步为POST请求,详细用法将在下一篇做介绍。

第二步:过滤参数

该步骤作用是将上述组装的参数,value为空的键值对去掉,同时去掉sign和sign_type参数。

第三步:生成签名

该步骤对应代码使用MD5加密方式

第四步:重新组装

将生成的签名加入盛放参数的map中

第五步:获取html

获取到的html是一个form表单,action为支付宝的网关:https://mapi.alipay.com/gateway.do?input_charset=编码格式,表单内容为input标签的集合,例如,将该表单显示在页面上,会跳转至支付宝网关,显示支付宝扫码页面,待用户扫码后,发起支付请求完成

接下来贴出代码:

该部分代码为最上层代码,获取的html可返回给页面直接使用

Map sParaTemp = new HashMap();
sParaTemp.put("service", AlipayConfig.serivce);//接口服务----即时到账
sParaTemp.put("partner", AlipayConfig.partner);//支付宝PID
sParaTemp.put("_input_charset", AlipayConfig.input_charset);//统一编码
sParaTemp.put("payment_type", payment_type);//支付类型
sParaTemp.put("notify_url", notify_url);//异步通知页面
sParaTemp.put("return_url", return_url);//页面跳转同步通知页面
sParaTemp.put("seller_email", seller_email);//卖家支付宝账号
sParaTemp.put("out_trade_no", out_trade_no);//商品订单编号
sParaTemp.put("subject", subject);//商品名称
sParaTemp.put("total_fee", total_fee);//价格
sParaTemp.put("body", body);
sParaTemp.put("paymethod", AlipayConfig.paymethod);
sParaTemp.put("defaultbank", defaultBank);
sParaTemp.put("show_url", show_url);
sParaTemp.put("anti_phishing_key", anti_phishing_key);
sParaTemp.put("exter_invoke_ip", exter_invoke_ip);
String html= AlipaySubmit.buildRequest(sParaTemp,"post","确认");
public static String buildRequest(Map sParaTemp, String strMethod, String strButtonName) {
    Map sPara = buildRequestPara(sParaTemp);//第二步+第三步:过滤参数
    List keys = new ArrayList(sPara.keySet());
    StringBuffer sbHtml = new StringBuffer();
    sbHtml.append("");
    for(int i = 0; i < keys.size(); ++i) {
        String name = (String)keys.get(i);
        String value = (String)sPara.get(name);
        sbHtml.append("");
    }

    sbHtml.append("");
    sbHtml.append("

跳转中,请稍候...");     sbHtml.append("");     return sbHtml.toString(); }

buildRequestPara()用于过滤参数和生成签名:

private static Map buildRequestPara(Map sParaTemp) {
    Map sPara = AlipayCore.paraFilter(sParaTemp);
    String mysign = buildRequestMysign(sPara);
    sPara.put("sign", mysign);
    sPara.put("sign_type", AlipayConfig.sign_type);
    return sPara;
}

第二步:paraFilter()过滤掉value的键值对和sign、sign_type:

public static Map paraFilter(Map sArray) {
    Map result = new HashMap();
    if (sArray != null && sArray.size() > 0) {
        Iterator var3 = sArray.keySet().iterator();
        while(var3.hasNext()) {
            String key = (String)var3.next();
            String value = (String)sArray.get(key);
            if (value != null && !value.equals("") && !key.equalsIgnoreCase("sign") && !key.equalsIgnoreCase("sign_type")) {
                result.put(key, value);
            }
        }
        return result;
    } else {
        return result;
    }
}

第三步:buildRequestMysign()生成签名:

public static String buildRequestMysign(Map sPara) {
    String prestr = AlipayCore.createLinkString(sPara);
    String mysign = "";
    if (AlipayConfig.sign_type.equals("MD5")) {
        mysign = MD5.sign(prestr, AlipayConfig.key, AlipayConfig.input_charset);
    }
    return mysign;
}

创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。


文章标题:接入支付宝支付接口(一):发起支付请求-创新互联
文章地址:http://scyanting.com/article/edgcg.html