一、你需要以公司的名义申请一个支付宝账号.没有公司的人请先注册一个公司.
二、公司需要通过支付宝的实名认证才能开通收款功能.
(注:我个人建议,开公司用一个新的手机号,专门用于公司业务,因为后面各种实名认证开通账号,都需要手机号.比如支付宝账号就需要绑定手机号,而你在注册公司后,手机号就会被卖给财务公司,到时会接到无数财务公司的电话,就是问你要不要记账的.)
三、开通收款功能了再往下看.
四、虽然支付宝的官方文档好像说的很清楚,但是实际操作时,总会有一些小细节给人制造麻烦,我写这篇博文的目的就是把我遇到的细节上的麻烦给大家分享一下.
五、https://docs./270/图1是支付宝关于电脑网页支付的文档页,大家可以先看看,看的差不多了,想具体操作了,再来看我的这篇文章.
六,现在开始说说具体操作.
七、需要先设置开放平台密钥.登录支付宝后,最上一行选“我的商家服务”,然后左侧栏里第二个方块里点“查看PID|KEY”,图2
进入后,左侧选“开放平台密钥”,顶部选“密钥管理”,先改底部“授权回调地址”(不知道改什么的话先空着,下文有述),再点“查看应用共钥”,图3
如下图,点修改.图4
如下图,下载密钥生成器.图5
密钥生成器运行如下(运行方法查看下载文件里的说明)图6
点击复制并粘贴到图5的框里,保存.
点击图6的“打开文件位置”,能看见如下图三个文件.pkcs8是用于java的,另外的是用于php或.NET的.只要private,不要public.图7
用文本编辑软件打开相应pem文件,图8
不要第一行和最后一行,取中间.一会需要复制到代码中.
注意:在这,我遇到了最大的坑,私钥应该是一连串字符串,没有换行,但是用文本编辑软件打开后,往往就在其中加入了换行,如果直接复制到代码里,则必然在调取支付宝付款页面时出错.必须手动删除换行,使其成为一个连续的字符串才行.
八、先下载一个DEMO(https://docs./270/106291/)根据你的网页语言选择相应的DEMO,我用PHP,这里就只用PHP举例.(注:官方文档既有DEMO也有SDK,用DEMO就好,改改参数就能用了).解压后得到如下图的文件.图9
所有这些文件,原封不动的上传到你的服务器网站文件夹里.将notify_url.php的网址写入图3的“授权回调地址”.而我们需要修改的只有return_url.php而已.
notify_url.php是支付结果的异步通知地址,return_url.php是同步跳转地址.在支付成功后,支付宝服务器会先异步通知notify_url.php,并从该页面得到“success”七个字符后才会再往return_url.php以GET方式发送支付成功的相关信息.而网站要根据支付结果做一些动作,也是从return_url.php页面开始.
八、下面是具体操作步骤.
九、在某个页面建立一个链接,指向一个空的php页面,假定是zhifu.php.链接中用GET形式明文传递参数.
十、先看相关官方文档https://docs./270/alipay.trade.page.pay,将相应语言的代码复制到zhifu.php里,这里我以php举例
require_once("AopSdk.php");//构造参数 $aop = new AopClient (); $aop->gatewayUrl = '/gateway.do'; $aop->appId = '请填写APPID'; //换成图3里的APPID$aop->rsaPrivateKey = '请填写商户私钥'; //换成图8里的私钥,注意去掉换行$aop->apiVersion = '1.0'; $aop->signType = 'RSA2'; $aop->postCharset= 'utf-8'; $aop->format='json'; $request = new AlipayTradePagePayRequest (); $request->setReturnUrl('请填写您的页面同步跳转地址'); //写return_url.php的互联网绝对地址$request->setNotifyUrl('请填写您的异步通知地址'); //写notify_url.php的互联网绝对地址$request->setBizContent('{"product_code":"FAST_INSTANT_TRADE_PAY","out_trade_no":"0320010101001", "subject":"Iphone6 16G","total_amount":"88.88","body":"Iphone6 16G"}');//这里有5个参数//第一个是固定的,不要改//第二个是商家的订单号,每笔付款应该有不同的订单号,相同订单号,支付宝会认为已经付过款了,建议用时间来作为订单号,php里,时间可以精确到微秒.函数是date("YmdHisu").//第三个是商品名称,会显示在支付页面中.(是给人看的)//第四个是价格,需要买家付多少钱,就写多少.//第五个是商品内容,不会显示在支付页面,大概会显示在消费记录里.//请求 $result = $aop->pageExecute ($request);//输出 echo $result;
以上内容是我在官方文档上做了修改以后的内容,可以直接复制到代码中使用,记得做参数修改.
关于notify_url.php,不是不能修改,但没必要,官方不建议修改,只改个文件名也没什么意思,所以就不动了.
关于return_url.php,是必须修改的,因为需要根据支付成功的返回参数来进行一些网站上的逻辑操作.
关于
$request->setBizContent('{"product_code":"FAST_INSTANT_TRADE_PAY","out_trade_no":"0320010101001", "subject":"Iphone6 16G","total_amount":"88.88","body":"Iphone6 16G"}');
这段代码,其中的后4个参数都是变化的,所以应该用参数代替.因为参数整体是个字符串,可以用一个变量先连接好,再带入函数.代码如下:
先给出调用此页面的地址:
zhifu.php?shopingname='商品名称'&money=0.01&shopingbody='商品内容'
下面针对该地址修改代码
$zhifu='{"product_code":"FAST_INSTANT_TRADE_PAY","out_trade_no":"'.date("YmdHisu").'", "subject":"'.$_GET["shopingname"].'","total_amount":"'.$_GET["money"].'","body":"'.$_GET["shopingbody"].'"}';$request->setBizContent($zhifu);
将此代码覆盖上面的代码即可.
十一、支付成功后,网站肯定还得做点什么,这时就需要修改return_url.php了.先看看跳转页面的参数都有什么:https://docs./270/alipay.trade.page.pay里有个跳转地址的参数,我把它断开,
/GkSL?total_amount=0.10×tamp=-11-02+18%3A34%3A19&sign=G3WI0czviMAOzS5t0fYaDgK32sGpjkkXYVFTpYMtgX8JaXLiGiUTO%2F2IHogcCFT96jBCLZ6IsNzd%2BmxkB%2FRuwG%2F7naQk1qReuORMkrB5cpBf9U40bIUoCmSNqtANsTE2UPV7GKegYG2RqoCRScTmeFAFHj5L7zsM%2BLuYb9mqN3g%3D&trade_no=110221001004330228438026&sign_type=RSA2&auth_app_id=073000007292&charset=UTF-8&seller_id=2088411964605312&method=alipay.trade.page.pay.return&app_id=073000007292&out_trade_no=0g320g010101001&version=1.0
这段地址里参数能用的只有total_amount和out_trade_no,如果不同的商品价格不同,可以只是用$_GET["total_amount"]
来判断是哪种商品.如果不同商品有相同价格,就需要先给每种商品一个唯一标识,将此标识、数量、买家标识等信息加入zhifu.php的out_trade_no参数中.然后根据$_GET["out_trade_no"]
的相应信息来区分商品.(字符串的各种操作,分割,判断等)
这里有个问题,就是如果反复载入该地址,可能会造成网站重复执行购买成功的逻辑语句(付一份钱,买很多次商品).因此须要加入一个判断,即只要付款成功并执行相应逻辑语句的同时,就将此次的out_trade_no记入买家数据库里.而执行付款成功操作前,先判断此次out_trade_no是否在买家数据库里已存在,若存在,则说明已经针对此次支付成功执行过一次操作语句了,不应再执行.若不同,则证明此次逻辑操作是支付成功后第一次执行,应该执行.