其实真是的支付宝支付网关和支付宝沙箱只是提交地址不同,如果是沙箱吧沙箱地址填写上去,如果是正式的环境请把真实的支付宝网关填写上去;
支付宝沙箱网关:https://openapi.alipaydev.com/gateway.do
支付宝正式网关:https://openapi.alipay.com/gateway.do
一,主页填写各种参数
新建一个pay.php文件
<?php #用户私钥 $pri_key = ''; #引入签名 include './Rsa.php'; //公共请求参数 $arr = [ #appid 'app_id' => '', 'method' => 'alipay.trade.page.pay', #同步地址 'return_url' => '', #异步地址 'notify_url' => '', 'charset' => 'utf-8', 'sign_type' => 'RSA2', 'timestamp' => date('Y-m-d H:i:s'), 'version' => '1.0', 'biz_content' => '', ]; //业务请求参数 $arr_params = [ #订单名称 'subject'=>'', #用户唯一订单号 'out_trade_no'=> '', #价格 'total_amount'=>'', 'product_code'=>'FAST_INSTANT_TRADE_PAY', ]; $arr['biz_content'] = json_encode($arr_params,JSON_UNESCAPED_UNICODE); ksort($arr); $str = urldecode(http_build_query($arr)); $rsa = new RSA(); $arr['sign'] = $rsa->rsaSign($str, $pri_key); header('location:https://openapi.alipaydev.com/gateway.do?' . http_build_query($arr));
二,类文件验证公钥,私钥
再建立一个Rsa.php
<?php class RSA { /** * RSA签名 * @param $data 待签名数据 * @param $private_key 私钥字符串 * return 签名结果 */ function rsaSign($data, $private_key) { $search = [ "-----BEGIN RSA PRIVATE KEY-----", "-----END RSA PRIVATE KEY-----" ]; $private_key=str_replace($search,"",$private_key); $private_key=$search[0] . PHP_EOL . wordwrap($private_key, 64, "\n", true) . PHP_EOL . $search[1]; $res=openssl_get_privatekey($private_key); if($res) { openssl_sign($data, $sign,$res,OPENSSL_ALGO_SHA256); openssl_free_key($res); }else { exit("私钥格式有误"); } $sign = base64_encode($sign); return $sign; } /** * RSA验签 * @param $data 待签名数据 * @param $public_key 公钥字符串 * @param $sign 要校对的的签名结果 * return 验证结果 */ function rsaCheck($data, $public_key, $sign) { $search = [ "-----BEGIN PUBLIC KEY-----", "-----END PUBLIC KEY-----" ]; $public_key=str_replace($search,"",$public_key); $public_key=$search[0] . PHP_EOL . wordwrap($public_key, 64, "\n", true) . PHP_EOL . $search[1]; $res=openssl_get_publickey($public_key); if($res) { $result = (bool)openssl_verify($data, base64_decode($sign), $res,OPENSSL_ALGO_SHA256); openssl_free_key($res); }else{ exit("公钥格式有误!"); } return $result; } }
三,验证支付宝公钥,私钥
最后异步登录过程新建一个notify.php
<?php #支付宝公钥 $pub_key = ''; include './Rsa.php'; $params = $_POST; $sign = $params['sign']; unset($params['sign']); unset($params['sign_type']); ksort($params); $str = urldecode(http_build_query($params)); $rsa = new RSA(); $stat = $rsa->rsaCheck($str, $pub_key, $sign); if($stat){ //判断支付状态 // $params['trade_status'] == 'TRADE_SUCCESS' || $params['trade_status'] == 'TRADE_FINISHED' // //根据订单号 判断订单金额是否一致 //app_id //update order stat 更新订单状态 echo 'success'; }else{ } //获取支付宝发送的数据 //除去sign、sign_type //排序 //拼接字符串 //使用公钥验签
使用API接口方式调用电脑Alipay网站支付功能
猜你喜欢
转载自blog.csdn.net/weixin_42242253/article/details/83415316
今日推荐
周排行