配置部署好后:
首先会向支付宝请求一个授权token,请求成功后将授权token与支付请求的数据包组合向支付宝发起支付请求
支付宝进行校验,支付请求处理
支付完成后会根据你设置的call_back_url跳转(当然是跳转回我们的网站根据他携带的数据进行下一步业务处理啦),同时也会根据你设置的notify_url异步通知支付结果。
异步notify使用的是post,跳转call_back_url使用的是get,你可以获取数据来进行支付完成后的业务处理。下面就是你自己业务处理了。
开始自助集成,下载demo包。
php_curl一般都是默认开启的(这个也必须开启,不开启就真没戏了),但php_openssl一般都是默认关闭的。如果你是租用的虚拟主机,很可能没有开启这项扩展。
开启了openssl,采用RSA方式,sign_type设为'001',需要公钥和私钥:
默认使用的签名方式sign_type是RSA,支付宝采用‘001’来代表它,需要openssl的支持,私钥rsa_private_key.pem、公钥alipay_public_key.pem需要自己手动生成(其实就是自己配置的一把钥匙和一把锁,钥匙给用户,锁留在自己手里,客户来了拿钥匙开锁,打开了继续下一步,打不开就say bye,强迫症患者可以去阅读下密码学的相关书籍,入门级知识点)。
生成方法:
开发包里自带openssl工具,运行openssl.exe:
生成RSA私钥:
openssl>genrsa -out rsa_private_key.pem 1024
生成RSA公钥:
openssl>rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
将RSA私钥转换成PKCS8格式:
openssl>pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt
在openssl.exe文件夹下就能看到rsa_private_key.pem和alipay_public_key.pem两个文件了,放到你demo包里的key文件夹下就可以了。
没有开启openssl,采用MD5模式,sign_type为 'MD5',不需要公钥和私钥,但key必须设置:
没有开启openssl且没办法去对php进行配置的虚拟主机也不要慌张,签名方式sign_type选择MD5即可。
这里一句话来说就是:你的服务器能openssl就用RSA签名,生成你的私钥和公钥,不能openssl就用MD5签名就好。
概览:
───────
代码文件结构
───────
WS_WAP_PAYWAP-PHP-UTF-8
│
├lib┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈类文件夹
│ │
│ ├alipay_core.function.php ┈┈┈┈┈┈支付宝接口公用函数文件
│ │
│ ├alipay_notify.class.php┈┈┈┈┈┈┈支付宝通知处理类文件【异步notify和跳转call_back_url的校验】
│ │
│ ├alipay_submit.class.php┈┈┈┈┈┈┈支付宝各接口请求提交类文件【生成支付请求的提交模块】
│ │
│ └alipay_rsa.function.php┈┈┈┈┈┈┈支付宝接口RSA函数文件【公钥私钥的校验模块】
│
├log.txt┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈日志文件
│
├alipay.config.php┈┈┈┈┈┈┈┈┈┈┈┈基础配置类文件【partnerid,key,call_back_url,notify_url等】
│
├alipayapi.php┈┈┈┈┈┈┈┈┈┈┈┈┈┈支付宝接口入口文件
│
├notify_url.php ┈┈┈┈┈┈┈┈┈┈┈┈┈服务器异步通知页面文件【支付完成后的异步通知】
│
├call_back_url.php┈┈┈┈┈┈┈┈┈┈┈┈页面跳转同步通知文件【支付完成后的跳转通知】
│
├key┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈私钥公钥文件夹【用于RSA签名校验】
│ │
│ ├rsa_private_key.pem┈┈┈┈┈┈┈┈┈商户的私钥文件
│ │
│ └alipay_public_key.pem┈┈┈┈┈┈┈┈支付宝的公钥文件
│
├openssl┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈缺省dll文件(用法见下方※注意※)
│ │
│ ├libeay32.dll【win的dll组件】
│ │
│ ├ssleay32.dll【win的dll组件】
│ │
│ └php_openssl.dll【php的ext扩展】
│
└cacert.pem ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈用于CURL中校验SSL的CA证书文件
注:
openssl文件夹中的3个DLL文件用法
1、如果你的系统是windows系统,且system32文件目录下没有libeay32.dll、ssleay32.dll这两个文件
那么需要拷贝这两个文件到system32文件目录中
2、如果您的php安装目录下(php\ext)中没有php_openssl.dll
那么请把php_openssl.dll放在这个文件夹中
需要配置的文件是:
alipay.config.php【基本的不可或缺的参数设置】
partner 商户id
key 商户安全校验码【MD5签名方式】
private_key_path/ali_public_key_path 公私密钥路径【001签名方式】
sign_type ‘001’ or ‘MD5’
input_charset 建议‘utf-8'’
cacert cacert.pem的路径,curl的校验
transport http或https,看你支不支持https了
alipayapi.php【参数主要用于支付请求的数据包的生成】
notify_url 支付成功后服务器的异步通知页面路径
call_back_url 支付成功后的页面跳转,即同步通知页面路径
merchant_url 支付中操作中断返回地址
seller_email 卖家支付宝帐户【自己部署时固定就好】
out_trade_no 商户订单号 【自己部署时生成就好,升级后28位】
subject 订单名称【本次订单的描述】
total_fee 付款金额 【本次订单的金额】
key文件夹
放你的公钥私钥文件,当然,放哪都行,你只要保证private_key_path/ali_public_key_path的路径正确即可
配置OK后,访问index.php,
这是demo的发起请求的页面,以后这些参数我们完全可以封装在自己的程序里,确认后会将数据post到alipayapi.php来请求token,代码里是
//获取request_token $request_token = $para_html_text['request_token'];
这样写的
然后用$request_token去发起支付请求:
//建立请求 $alipaySubmit = new AlipaySubmit($alipay_config); $html_text = $alipaySubmit->buildRequestForm($parameter, 'get', '确认'); echo $html_text;
$html_text其实是一个确认支付请求的链接,支付宝把这货写成自动确认提交的了,大家可以去lib/alipay_submit.class下的buildRequestForm函数里面把document.forms['alipaysubmit'].submit();删掉就好。
...付钱吧骚年付钱付钱付钱付钱!!!
跳转会call_back_url设置的地址,并且带着支付完成后的get参数返回你的网站,具体参数项我忘了,大家可以var_dump($_GET)一下看看,在这里你则进行下一步的业务处理,修改订单状态啊什么的。notify_url也会收到异步post通知。业务逻辑就靠你们了~~~
1、通用参数中少了如service、partner等必填参数
确认你选得sign_type模式,MD5时一定要设置key,001(RSA)是一定要生成公私密钥、设置好公私密钥的路径,设置好cacert的路径。
2、function openssl_get_privatekey/openssl_get_publickey is not found什么的
你php没有开启openssl扩展啦。