电脑网站支付集成开发指南分享

来自    电脑网站支付 | 
作者:王兰玉  |  更新于:2018-05-10 10:43:15     

本帖仅供参考,非官方demo

一、文档地址

文档地址:点击【查看

sdk下载:点击【查看

官方demo下载地址:点击【查看

二、开发前准备工作

1、签约:https://openclub.alipay.com/read.php?tid=276&fid=72

2、创建应用:https://openclub.alipay.com/read.php?tid=1606&fid=72

3、生成密钥:https://openclub.alipay.com/read.php?tid=1833&fid=69

4、下载服务端sdk:https://docs.open.alipay.com/54/106370/

如何签约以及签约无法成功等相关签约问题https://openclub.alipay.com/read.php?tid=276&fid=72

检查调用appid的应用功能列表中是否添加“电脑网站支付”并显示已签约。

三、接口集成示例代码

1、参数说明

(1)out_trade_no:商户订单号,由商户自定义设置;

(2)subject:商品标题;

(3)product_code:固定产品码值:FAST_INSTANT_TRADE_PAY;

(4)total_amount:交易订单金额,精确到小数点后2位,最小设置为0.01;

2、JAVA版请求示例

(适用于jdk1.5以上)

	//获得初始化的AlipayClient
		AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);
		//设置请求参数
		AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
		//同步通知地址:支付成功后页面自动跳转到传值地址中
		alipayRequest.setReturnUrl("https://docs.open.alipay.com/200");
		//异步通知地址:支付成功生成之后会post返回订单信息详情到该地址,用于商家做业务逻辑处理
		alipayRequest.setNotifyUrl("https://docs.open.alipay.com/200");
	    AlipayTradePagePayModel model = new AlipayTradePagePayModel();
		model.setSubject("电脑网站支付测试");
		model.setTotalAmount("0.01");
		model.setProductCode("FAST_INSTANT_TRADE_PAY");
		//自定义参数请转码后传入该参数内,可以传值逗号,等号之类,但不能传引号,否则会报错,其他特殊符号是否报错以实测为准
		String passback_params	 = "{ab=测试一下;tdst=公共参数;ccsd=gds;dfa=23·12}";
		String passback_params2 =URLEncoder.encode(passback_params,"UTF-8");
		model.setPassbackParams(passback_params2);
		alipayRequest.setBizModel(model);
		/**	
		 * BizContent传值模式
		alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\"," 
				+ "\"total_amount\":\""+ total_amount +"\","  
				+ "\"subject\":\""+ subject +"\"," 
				+ "\"qr_pay_mode\":\"4\"," 
				+ "\"timeout_express\":\"1m\"," 
				+ "\"passback_params2\":\""+ passback_params2 +"\"," 
				+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
				
				**/
		//get请求方式,返回http链接  
		AlipayTradePagePayResponse respose = alipayClient.pageExecute(alipayRequest,"get");
		
		//post请求方式,返回from表单 
		//AlipayTradePagePayResponse respose = alipayClient.pageExecute(alipayRequest);
		
		//打印请求信息
		System.out.println(respose.getBody());

 

3、PHP版请求示例

(适用于ph5.5以上环境) 

<?php

require_once 'AopSdk.php';
$aop = new AopClient ();
$aop->appId = '填写您的appid';
$aop->rsaPrivateKey = '填写您的私钥';
$aop->alipayrsaPublicKey='填写您的支付宝公钥';
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->apiVersion = '1.0';
$aop->postCharset='utf-8';
$aop->format='json';
$aop->signType = 'RSA2';

//生成随机订单号
$date=date("YmdHis");
$arr=range(1000,9999);
shuffle($arr);
$request = new AlipayTradePagePayRequest();
//收款方账户类型为:ALIPAY_LOGONID:支付宝登录号,支持邮箱和手机号格式。
$request->setBizContent("{" .
    "\"out_trade_no\":\"".$date.$arr[0]."\"," .
    "\"total_amount\":\"0.1\"," .
	"\"subject\":\"电脑网站支付测试\"," .
    "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"" .
    "}");
//get请求,返回链接
$result = $aop->pageExecute($request,"get");
//post请求,返回表单
//$result = $aop->pageExecute($request);

print_r(htmlspecialchars($result));
?>

 

4、.NET版请求示例

注:适用于Visual studio 2010及以上版本、Framework3.5 SP1及以上版本的开发环境

沙箱测试代码示例:

using Aop.Api;
using Aop.Api.Request;
using Aop.Api.Response;
using System;
using System.IO;

/**
 * 沙箱电脑网站支付
 * 文档地址:https://docs.open.alipay.com/270/alipay.trade.page.pay
 * */
namespace AlipayTradePagePay
{
    class Program
    {
        //沙箱支付宝公钥,查看地址:https://openhome.alipay.com/platform/appDaily.htm
        public static string alipay_public_key = @"支付宝公钥";

        //沙箱pkcs1私钥,千万不要用pkcs8格式的 ,如何获取,请查看:https://openclub.alipay.com/read.php?tid=1833&fid=25
        public static string merchant_private_key = @"私钥";

        static void Main(string[] args)
        {
            //初始化
            IAopClient alipayClient = new DefaultAopClient("https://openapi.alipaydev.com/gateway.do", "appid", merchant_private_key, "json", "1.0", "RSA2", alipay_public_key, "utf-8", false);
            AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
            //请求参数设置
            request.BizContent = "{\"out_trade_no\":\"201810201450FDSa\",\"subject\":\"沙箱测试\",\"product_code\":\"FAST_INSTANT_TRADE_PAY\",\"total_amount\":\"0.01\"}";
            //同步跳转地址,用于订单支付成功之后同步跳转
            request.SetReturnUrl("https://docs.open.alipay.com/200");
            //异步跳转地址,用于接收异步返回结果
            request.SetNotifyUrl("https://docs.open.alipay.com/200");
            //默认是post请求方式,返回form表单
            AlipayTradePagePayResponse response = alipayClient.pageExecute(request);
            //get请求方式,返回请求链接
            //AlipayTradePagePayResponse response = client.pageExecute(alipayRequest, "", "GET");
            //打印返回结果
            Console.WriteLine(response.Body);
        }

        // 私钥文件类型转换成纯文本类型 返回过滤后的字符串类型私钥
        public static string getMerchantPriveteKeyStr()
        {
            StreamReader sr = new StreamReader(merchant_private_key);
            string pubkey = sr.ReadToEnd();
            sr.Close();
            if (pubkey != null)
            {
                pubkey = pubkey.Replace("-----BEGIN PUBLIC KEY-----", "");
                pubkey = pubkey.Replace("-----END PUBLIC KEY-----", "");
                pubkey = pubkey.Replace("\r", "");
                pubkey = pubkey.Replace("\n", "");
            }
            return pubkey;
        }
    }
}

 

post请求返回结果:

<form id='alipaysubmit' name='alipaysubmit' action='https://openapi.alipaydev.com/gateway.do?charset=utf-8' method='get' style='display:none;'><input  name='app_id' value='2016101800718925'/><input  name='biz_content' value='{"out_trade_no":"201810201450FDSa","subject":"沙箱测试","product_code":"FAST_INSTANT_TRADE_PAY","total_amount":"0.01"}'/><input  name='charset' value='utf-8'/><input  name='format' value='json'/><input  name='method' value='alipay.trade.page.pay'/><input name='notify_url' value='https://docs.open.alipay.com/200'/><input  name='return_url' value='https://docs.open.alipay.com/200'/><input  name='sign_type' value='RSA2'/><input  name='timestamp' value='2018-05-10 10:22:40'/><input  name='version' value='1.0'/><input  name='sign' value='iQ0YEXzDlVDMtQoLZg6plCvZnknTrM7/UcbsFPOxF4DiDsZTcqDxkGHngxrUHq4fqlJCiVT6c5PanCpHDhJ9qb2xZenw/hWaakwQ4AR1xyl7sC21C37fB6Z68lE6CVqqsIzsOok0An4UsbJ8iPrQnBy7HZjF/DqU5CT/hUy/0mczcyCcS7GhzIZGLfeWKULEpDnghJpYLcIDZQ7UNxxj/gRY4+6QnE9EiuuyEDMba4X47y/KUqPBaXeCL72VKfbx9hif299BBBv6y88cbWh/zbr/wqB568AYYhaXX5P74/0O6alnVFiq5MIMR6n4d34IKe1hAAb+jNN1+dz3jssxPA=='/><input type='submit' value='get' style='display:none;'></form><script>document.forms['alipaysubmit'].submit();</script>

get请求返回结果

https://openapi.alipaydev.com/gateway.do?app_id=2016101800718925&biz_content=%7b%22out_trade_no%22%3a%2220180925151812345434123%22%2c%22product_code%22%3a%22QUICK_WAP_WAY%22%2c%22qrcode_width%22%3a0%2c%22subject%22%3a%22%b5%e7%c4%d4%cd%f8%d5%be%d6%a7%b8%b6%b2%e2%ca%d4%22%2c%22total_amount%22%3a%220.01%22%7d&charset=GBK&format=json&method=alipay.trade.page.pay&sign_type=RSA2&timestamp=2018-09-25+10%3a40%3a34&version=1.0&sign=bhJdnJ0tQ%2bm4xOb8PfoW6JJkrp2rVfFN2b7ZKBcONEG8GU1JpTuukyf%2b66c0xoJ%2fL3OJaGqrR%2ftFHmCdVQJNuRtWUrMNxyVpVAL44U4dgQM61UFNUUx7%2f2EdLs2Tu21m8uzoWnRi3ER2zPFFllIr%2bdwK28GZHCSs8HrNVCLbKfyiMHzDb9m2fP6YM1Tw4nVOGz2xn6VcjXv2wkycZVpfKkv%2bd%2fZosNQFbgyFinoEttl%2bzB4%2fhSXl4wqQzpcM3WCpeH4QvDuaJPN1nPwJVG79fHQInx6YahZSyzk2qLhPAr0YEqVAso2z75JUaOif9BWXPAu%2fCSNJiEUnXwkfn1xlYQ%3d%3d

四、注意事项

1、基本常识

(1)此时支付宝订单还未创建,调用查询接口查询会报“订单号不存在”,只有使用手机钱包扫码之后,或者在电脑上点击右侧【登陆账号】付款,输入账号密码登陆之后才会创建订单
(2)如果没有传值return_url ,支付成功页面也不会跳转
(3)如果传值了timeout_express,页面上就会显示倒计时,倒计时完了之后,就会跳转到超时关闭页面

 

2、电脑网站支付前置模式

(1)qr_pay_mode参数可以控制二维码的显示效果
0:订单码-简约前置模式,对应iframe宽度不能小于600px,高度不能小于300px;
1:订单码-前置模式,对应iframe宽度不能小于300px,高度不能小于600px;
3:订单码-迷你前置模式,对应iframe宽度不能小于75px,高度不能小于75px;
4:订单码-可定义宽度的嵌入式二维码,商户可根据需要设定二维码的大小。
(2)qrcode_width:商户自定义二维码宽度
注:qr_pay_mode=4时该参数生效

3、沙箱测试注意事项

(1)使用沙箱环境,必须使用沙箱钱包扫码支付,不能用我们日常支付用支付宝钱包,或者登陆沙箱账号进行支付即可!

(2)沙箱账号查看地址:https://openhome.alipay.com/platform/appDaily.htm?tab=account

(3)沙箱钱包请扫码下载下载:

4、辅助接口

alipay.trade.query(统一收单线下交易查询)集成流程:https://openclub.alipay.com/read.php?tid=13842&fid=56

alipay.trade.refund(统一收单交易退款接口) 集成流程:https://openclub.alipay.com/read.php?tid=13853&fid=56

alipay.trade.fastpay.refund.query(统一收单交易退款查询) :https://openclub.alipay.com/read.php?tid=13962&fid=56

alipay.trade.close(统收单交易关闭接口)集成流程:https://openclub.alipay.com/read.php?tid=13963&fid=56

alipay.data.dataservice.bill.downloadurl.query(查询对账单下载地址):https://openclub.alipay.com/read.php?tid=14016&fid=56

五、显示效果

将返回form表单放到前台页面进行访问:

 

<?php

require_once 'AopSdk.php';
$aop = new AopClient ();
$aop->appId = '填写您的appid';
$aop->rsaPrivateKey = '填写您的私钥';
$aop->alipayrsaPublicKey='填写您的支付宝公钥';
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->apiVersion = '1.0';
$aop->postCharset='utf-8';
$aop->format='json';
$aop->signType = 'RSA2';

//生成随机订单号
$date=date("YmdHis");
$arr=range(1000,9999);
shuffle($arr);
$request = new AlipayTradePagePayRequest();
//收款方账户类型为:ALIPAY_LOGONID:支付宝登录号,支持邮箱和手机号格式。
$request->setBizContent("{" .
    "\"out_trade_no\":\"".$date.$arr[0]."\"," .
    "\"total_amount\":\"0.1\"," .
	"\"subject\":\"电脑网站支付测试\"," .
    "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"" .
    "}");

$result = $aop->pageExecute($request);

print_r(htmlspecialchars($result));
?>
ketwo | 2018-05-29 16:04:18
错误代码 invalid-app-id 错误原因: 无效的AppID参数 是什么原因?
天籁 | 2018-05-29 16:08:33
ketwo:错误代码 invalid-app-id 错误原因: 无效的AppID参数 是什么原因?回到原帖
这个一般是appid使用错误或是你的网关使用错误导致 详细的建议你参考这个自查文档:https://openclub.alipay.com/read.php?tid=1909&fid=72 有问题再追问
ketwo | 2018-05-30 11:36:04
再问一下 付款时跳出“抱歉,系统网络繁忙,您暂时无法付款,请稍后再试”,大致会是什么问题?谢谢
天籁 | 2018-05-30 14:13:09
ketwo:再问一下 付款时跳出“抱歉,系统网络繁忙,您暂时无法付款,请稍后再试”,大致会是什么问题?谢谢回到原帖
请问是沙箱测试还是正式账号测试 请你这边提供一下请求参数 这边看一下
汇铭 | 2018-12-03 11:37:11
支付成功不会跳转怎么回事呢?异步回调收到了信息,但是同步回调URL报404错误,请问哪里有错误, 404 Not Found The requested URL was not found on this server. Sorry for the inconvenience. Please report this message and include the following information to us. Thank you very much! URL: http://unitradeprod.daily.alipaydev.com/acq/cashierReturn.htm?sign=K1iSL1gn5tqoqf%252BsdeCj%252FBq6iouzkfhoqysW631VNws4CuNb2jO0lnkoozuPSfIZQpMBdBs%253D&outTradeNo=2015032001010100606&pid=2088102176435704&type=1 Server: gateway-2.daily.alipay.net Date: 2018/12/03 11:01:56 Powered by Tengine
王兰玉 | 2018-12-03 12:02:52
汇铭:支付成功不会跳转怎么回事呢?异步回调收到了信息,但是同步回调URL报404错误,请问哪里有错误, 404 Not Found The requested URL was not found on this server. Sorry fo...回到原帖
你好,请问你是沙箱环境测试同步跳转404吗?请请提供一下贵司支付宝账号+沙箱appid+钉钉号(私信提供),这边返回确认之后再给您准确回复
CoderYang | 2019-01-31 10:04:27
time_expire 根据文档设置绝对超时时间,格式为yyyy-MM-dd HH:mm 然后就会报错,INVALID_PARAMETER
王兰玉 | 2019-01-31 10:18:59
CoderYang:time_expire 根据文档设置绝对超时时间,格式为yyyy-MM-dd HH:mm 然后就会报错,INVALID_PARAMETER回到原帖
你好,我们的电脑网站支付文档中并没有time_expire 这个参是,请不要随意加自定义参数,参数详情请参考文档:https://docs.open.alipay.com/270/alipay.trade.page.pay
CoderYang | 2019-01-31 10:23:24
王兰玉:你好,我们的电脑网站支付文档中并没有time_expire 这个参是,请不要随意加自定义参数,参数详情请参考文档:https://docs.open.alipay.com/270/alipay.trade.page.pay回到原帖
目前我在调试alipay.trade.page.pay这个接口,参考的文档是:https://docs.open.alipay.com/api_1/alipay.trade.page.pay/ 这个文档中看到有time_expire这个参数
王兰玉 | 2019-01-31 10:24:47
CoderYang:目前我在调试alipay.trade.page.pay这个接口,参考的文档是:https://docs.open.alipay.com/api_1/alipay.trade.page.pay/ 这个文档中看到有time_expire这个参...回到原帖
这个文档是有问题的,请使用我发你的文档进行参考
CoderYang | 2019-01-31 10:27:18
王兰玉:这个文档是有问题的,请使用我发你的文档进行参考回到原帖
好的,谢谢.这个问题困扰了好久
testtest订单 | 2019-04-08 10:41:48
testtest订单 | 2019-04-08 10:49:03
testtest订单:<ul class="big_img J_gallery_list" style="list-style-type: none;"><li class="J_gallery_items"><a target="_blank"><img cl...回到原帖
有人指导一下吗?
煜雨飞飞 | 2019-04-08 10:49:16
testtest订单:<ul class="big_img J_gallery_list" style="list-style-type: none;"><li class="J_gallery_items"><a target="_blank"><img cl...回到原帖
你好,沙箱环境不稳定,目前在日常维护中,请使用正式环境测试,以正式环境测试结果为准
我的回复

返回顶部