WAP 站 支付宝付款流程代码演示

支付宝调用方法

public function alipay($out_trade_no,$total_amount){
        $pri_key =私钥;//手动更改
        $arr = [
            'app_id' => APPID,//手动更改
            'method' => 'alipay.trade.wap.pay',
            'return_url' => 'http://open.luomengyuan.cn/return_state',
            'charset' => 'utf-8',
            'sign_type' => 'RSA2',
            'timestamp' => date('Y-m-d H:i:s'),
            'version' => '1.0',
            'notify_url' => 'http://open.luomengyuan.cn/notify_state',
            'biz_content' => '',
        ];
        $arr_param = [
            'subject' => '测试',
            'out_trade_no' => $out_trade_no,//订单号
            'total_amount' => $total_amount,//商品总金额
            'product_code' => 'QUICK_WAP_WAY',
        ];
        //转换json格式
        $arr['biz_content'] = json_encode($arr_param,JSON_UNESCAPED_UNICODE);
        //按键排序
        ksort($arr);
        //拼接url参数
        $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));
    }

异步回调方法代码

    /**
     * 支付宝异步返回
     */
    public function notify_state(){
        $pub_key =支付宝公钥;
        //获取支付宝发送的数据
        $params = $_POST;
        //测试是否能走通
        //file_put_contents('./test.php', print_r($params,true) . "\r\n",FILE_APPEND);
        $sign = $params['sign'];
        //除去sign、sign_type
        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){
            //判断支付状态
            if($params['trade_status'] == 'TRADE_SUCCESS' ||  $params['trade_status'] == 'TRADE_FINISHED'){
                $data = DB::table('order')->where('order_number',$params['out_trade_no'])->first();
                //根据订单号 判断订单金额是否一致
                if($data->sum_price == $params['total_amount']){
                    //update order stat 更新订单状态
                    $res = DB::table('order')->where('order_number',$params['out_trade_no'])->where('status',1)->update(['status'=>2]);
                    if($res > 0){
                        echo 'success';
                    }
                }
            }
        }
    }

 RSA类

<?php

class RSA
{
    /**
     * RSA签名
     * @param $data 待签名数据
     * @param $private_key 私钥字符串
     * return 签名结果
     */
    function rsaSign($data, $private_key) {

            $search = [
                    "-----BEGIN RSA PRIVATE KEY-----",
                    "-----END RSA PRIVATE KEY-----",
                    "\n",
                    "\r",
                    "\r\n"
            ];

            $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-----",
                    "\n",
                    "\r",
                    "\r\n"
            ];
            $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;
    }

}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
订单系统2016 WAP版新增功能: 1、邮件提醒+手机短信提醒{手机邮箱开启短信提示功能即可},特别增强对将QQ邮箱设置为订单发件箱的支持;邮件标题进一步优化,显示订单编号、姓名(会员名)、联系电话 2、产品套餐选择支持单选、复选、下拉选择,满足亲们多样化需求 3、订单来路页面检测 4、下单人IP追踪 5、支持设置同一IP下单间隔时间,防重复提交;增强恶意空单拦截,有效应对恶意客户拦截传递过程中的订单信息后提交空单行为 6、升级优化邮件系统内核到最新 7、对空间要求更宽泛,只要空间支持PHP就能使用,支持绝大多数的PHP空间 8、相关提示更加人性化,拥有本订单系统的亲们能根据错误提示快速明了订单系统无法正常工作的原因,方便对症下药,迅速安装配置 9、全部为全新界面,更加美观、大气 10、增强支付宝付款接口,在支付宝业务调整,免签接口失效后,本店第一时间升级了订单系统,提供了收款码收款(支付宝收款码获取方法及替换方法见附送的WORD文档)及支付宝商户双接口,方便买家根据自己的需求切换使用 11、新增微信付款接口,客户无需加好友,直接扫描二维码(微信支付付款二维码获取方法及替换方法见附送的WORD文档)完成支付。 12、加入伪数据库功能,订单提交失败自动写入设置好的数据文件中,确保不漏一单 请注意您空间要支持PHP或全能空间,空间不能禁用SMTP.纯ASP空间不能使用本订单系统。 请注册一个163邮箱用来发信,(当然也可用其它邮箱发信,只是麻烦些)再注册一个手机邮箱用来收订单,同时手机邮箱请设置手机通知邮件到达免费提醒功能。 (移动手机邮箱请到http://mail.10086.cn/注册,联通手机到http://mail.wo.com.cn注册,电信手机到http://mail.189.cn注册) 配置订单系统需要用到亲的163邮箱地址(发订单邮件用)、QQ邮箱地址(收订单邮件用)、手机邮箱地址(收订单免费短信提示用). ------------------------------------------------------------------------------------- 订单系统配置 请对照注释修改文件夹下的 bdconfig.php 配置文件引号中的内容 ------------------------------------------------------------------------------------- /************************** 订单发送设置 ************************* */ $MailFrom = '邮箱地址'; // 设置一个用来发送订单信息的邮箱,需开启SMTP服务 $Mailhost = 'SMTP服务器地址'; // 邮箱SMTP服务器地址 【163邮箱(smtp.163.com)、qq邮箱(smtp.qq.com)】 $MailUsername = '邮箱账号'; // 邮箱登陆帐号 【如果是163邮箱需填写整个邮箱地址,如果是qq邮箱只需填写qq号,前提开通pop3】 $MailPassword = '登录密码'; // 邮箱登陆密码【如果必须开启客户端授权密码才能开启163邮箱的POP3服务的话,则需要将此密码改为客户端授权密码】

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值