php 微信与支付宝支付(PC)

//微信支付

本人是拿TP5框架 

1.先从微信官网把SDK下载下来,在vendor根目录下边新建一个文件夹起名叫做wxpay,然后把ilb下边所有的文件放到新建的文件夹下边(wxpay), 再将 example 文件夹下的 WxPay.Config.php 拿出来,放到wxpay目录下,修改require_once所引入的路径,在配置起文件中所需的参数, 然后再去商户平台下载证书,最好放到有权限的文件夹下边,然后再修改修改 WxPay.Api.php 第二个require_once的路径,将其修改成require_once "WxPay.Config.php",新建一个控制器起名叫做wxpay.php,下边是本控制器的代码

<?php
namespace app\index\controller;
use think\Controller;
class Wxpay extends Controller
{
    public function index(){
        header("Content-type:text/html;charset=utf-8");
 
        require VENDOR_PATH.'/wxpay/WxPay.Api.php'; //引入微信支付
        $input = new \WxPayUnifiedOrder();//统一下单
        $config = new \WxPayConfig();//配置参数
 
        $paymoney = 1; //这个是测试的支付金额
        $out_trade_no = 'WXPAY'.date("YmdHis"); //商户订单号
        $goods_name = $paymoney.'元'; //商品名称
        $input->SetBody($goods_name);
        $input->SetAttach($goods_name);
        $input->SetOut_trade_no($out_trade_no);
        $input->SetTotal_fee($paymoney*100);//金额乘以100
        $input->SetTime_start(date("YmdHis"));
        $input->SetTime_expire(date("YmdHis", time() + 600));
        $input->SetGoods_tag("test");
        $input->SetNotify_url("http://www.xxx.com/wxpaynotifyurl"); //异步回调地址
        $input->SetTrade_type("NATIVE");
        $input->SetProduct_id("1");//商品id
        $result = \WxPayApi::unifiedOrder($config, $input);
 
        if($result['result_code']=='SUCCESS' && $result['return_code']=='SUCCESS') {
            $url = $result["code_url"];
            $this->assign('url',$url);
        }else{
            $this->error('参数错误'); 
        }
        return view();
    }
}

2. 前台需要生成一个二维码,二维码中的内容是后台所返回的url,

把sdk中 example 文件夹下的 phpqrcode文件夹 和 qrcode.php 拿出来,放到自己可以找到的地方,本人是放到public下边,

最终再前台一行代码搞定  

<img class="wxpay_img" src="/qrcode.php?data={$url}" alt="扫码支付">  

//如果异步回调需要验证签名可以执行以下操作, 此处注意一点,这里的加密方式适合支付的加密方式一致

  /* $obj 是接受的参数数组格式   $appwxpay_key  是微信的密钥
    * 格式化参数格式化成url参数  生成签名sign
    */
    private function appGetSign($Obj,$appwxpay_key)
    {

        foreach ($Obj as $k => $v)
        {
            $Parameters[$k] = $v;
        }


        //签名步骤一:按字典序排序参数
        ksort($Parameters);

        $String = $this -> ToUrlParams($Parameters);


        //签名步骤二:在string后加入KEY

        if($appwxpay_key){
            $String = $String."&key=".$appwxpay_key;
        }


        //签名步骤三:加密
        $String = hash_hmac('sha256',$String,$appwxpay_key);

        //签名步骤四:所有字符转为大写
        $result_ = strtoupper($String);


        return $result_;
    }


    private function ToUrlParams($Parameters)
    {
        $buff = "";
        foreach ($Parameters as $k => $v)
        {
            if($k != "sign" && $v != "" && !is_array($v)){
                $buff .= $k . "=" . $v . "&";
            }
        }

        $buff = trim($buff, "&");
        return $buff;
    }


这个就完成微信支付了
关于微信同步回调,在前台通过ajax 轮询的去请求接口,这个接口是查询微信异步回调所修改订单中的状态,直到请求回来,根据状态值来做出相应的操作。 本人的异步回调不是很完美,请多指教。

//支付宝支付

去支付宝将sdk下载,放到vendor文件夹下,然后就可以了,新建一个控制器,下边是代码

$out_trade_no = 2; //订单号(必填)
$subject = '测试';  //商品信息(必填)
$total_amount = 0.01;  支付金额(必填)
$body = '';     商品描述(可为空)
vendor('alipay.pagepay.buildermodel.AlipayTradePagePayContentBuilder');

$payRequestBuilder = new \AlipayTradePagePayContentBuilder();
$payRequestBuilder->setBody($body);
$payRequestBuilder->setSubject($subject);
$payRequestBuilder->setTotalAmount($total_amount);
$payRequestBuilder->setOutTradeNo($out_trade_no);


vendor('alipay.pagepay.service.AlipayTradeService');



$config = config('zfbConfig'); //这个里边是支付宝的一些配置,本人是写到配置里边,

//这些是是所需要的配置
    'app_id' => "",
    //商户私钥
    'merchant_private_key' => "",

    //异步通知地址
    'notify_url' => "",

    //同步跳转
    'return_url' => "",

    //编码格
    'charset' => "UTF-8",

    //签名方式
    'sign_type'=>"RSA2",

    //支付宝网关
    'gatewayUrl' => "https://openapi.alipay.com/gateway.do",

    //支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
    'alipay_public_key' => "",


$aop = new \AlipayTradeService($config);

$response = $aop->pagePay($payRequestBuilder,$config['return_url'],$config['notify_url']);

将配置完成之后,就可以支付了 。。。

如果异步回调需要验证签名则执行以下操作

 //$config 是支付宝的配置参数
 //check 这个方式是sdk自带的,传入的必须是支付宝的公钥,一定切记
 $alipaySevice = new \AlipayTradeService($config);
 
 $result = $alipaySevice->check($data);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值