第一:第三方支付原理
第二:支付接口申请流程
地址:https://docs.open.alipay.com/270/105899/ ;
参考地址:https://blog.csdn.net/november22/article/details/54233269#comments
1. 注册是支付宝商家账号 —— 注册地址:https://memberprod.alipay.com/account/reg/index.htm;
2. 注册成功后,找到蚂蚁金服开放平台,点击支付应用;
3、创建应用
4、 添加应用中的电脑支付功能
5、开发配置
说明:
(1)其中的支付宝网关地址不用改;
(2)应用网关设置为你网站的域名(如:https://www.xxx.com/),所以这个位置的设置就决定了你的网站首先要上线、然后域 名解析到服务器上才可以申请支付宝的支付接口;
(3)授权回调地址不用设置,一般如果涉及到第三方访问应用的时候才需要设置;
(4)设置应用公钥 —— 获取应用公钥【支付宝公钥】和私钥【商户私钥】的参考文档。
下载地址:https://docs.open.alipay.com/291/105971
下载、解压,然后生成秘钥,注意:文件夹的目录中一定不能带有中文字符吗,不然工具不能使用,这个步骤我就不一步步的说了。,将生成的公钥如下图,配置到查看应用公钥那儿,第一次登陆的应该现实的是配置公钥。点击确定,然后会生成支付宝公钥【这里一定 不要配置错误了,不然后面的程序会跑不起来的】
6、 当配置好后,直接提交审核,之后就等待审核了。
7、配置参数
1. app_id :应用ID,在这个地址中查看:https://openhome.alipay.com/platform/keyManage.htm;
2. merchant_private_key:商户私钥。这个在获取应用公钥和私钥时就已经获取到,公钥上传到支付宝中,
私钥就在项目中与之匹配验证;
3. notify_url : 异步通知回调地址。支付成功后,支付宝回调服务器的地址;
4. return_url:同步跳转地址。支付成功回调了服务器的地址后,自动跳转到目标地址;
5. charset:编码格式,一般为“UTF-8”;
6. sign_type:签名方式,一般为“RSA2”;
7. gatewayUrl:支付宝网关,https://openapi.alipay.com/gateway.do;
8. alipay_public_key:支付宝公钥,在这个地址查看:https://openhome.alipay.com/platform/keyManage.htm。
第三:PC扫码支付实现【以TP5为例】
1、下载支付宝支付demo,下载地址:https://docs.open.alipay.com/270/106291/;
2、解压放入Vendor文件夹下
3、在配置文件中配置支付宝配置参数
【app_id、alipay_public_key、merchant_private_key、charset、sign_type、alipay_public_key与APP支付宝支付的配置参数一致】
'alipay' => [
//应用ID,您的APPID。
'app_id' => "",
//商户私钥
'merchant_private_key' => "",
//异步通知地址
'notify_url' => \think\Request::instance()->domain()."/order/pay/alipay_notify",
//同步跳转
'return_url' => \think\Request::instance()->domain()."/order/pay/alipay_notify",
//编码格式
'charset' => "UTF-8",
//签名方式
'sign_type'=>"RSA2",
//支付宝网关
'gatewayUrl' => "https://openapi.alipay.com/gateway.do",
//支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
'alipay_public_key' => "",
],
4、生成支付二维码
// 支付
public function orderpay($ordersn)
{
$config = Config::get('alipay');
$order = db('shop_order');
$where = ['uid'=>$this->uid,'ordersn'=>$ordersn];
$orderinfo = $order->field('ordersn,pay_price,status')->where($where)->find();
if(empty($orderinfo)) return $this->error('抱