调用支付宝支付功能

 一、主页 填写各种参数

新建一个pay.php文件

<?php
#用户私钥
$pri_key = '';
#用户公钥
$pub_key = '';
#引入签名
include './Rsa.php';
//公共请求参数
$arr = [
    #appid
	'app_id' => '',
	'method' => 'alipay.trade.wap.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'=>'QUICK_WAP_WAY'
];
$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 = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvAsduSANl74M9o3P13kJNJMCk5GrDnnqU1p1i98YIvT+krG08dmknXreBLp3byQOTATnUKBhTMDT96m8+4MtjbBZUIEHUWY/2xlhzQUhDQv040upHoe1DFW6q4/iQjHEq5bjLm4we5rCABGU4wF5WYV+iqjZE/+OARtSzgHuf0ZrUkzKViPqwmIg1a52zM1G8XQ7KxBsk/BB5NUwtgtE3qHCGM27aGHmhxhjGOX4rs9wYjgviBGQc4HB15xKiL1GmSc9UdwsH8bd/Z8cKY1rXrE+uLwEaDgMoP6xpXnsKH+WZLffsPIjTC2T5k7daTatk9R023UJEsFSbmQ7gO0C0wIDAQAB';
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
//排序
//拼接字符串 
//使用公钥验签







猜你喜欢

转载自blog.csdn.net/weixin_42242253/article/details/81636811
今日推荐