第三方技术 支付 退款

stripe 支付 退款

第一步先到stripe 官网  https://stripe.com 注册一个账号

然后到  https://pan.baidu.com/s/1eRIVVGm  这个链接里面下载例子(这个文件里只包含支付demo和公共api接口包)

Api 接口地址 :https://stripe.com/docs/api  (这个地址可能在谷歌里面打开里面什么都没有,大家可以到火狐或者IE浏览器上看看),api地址里面包含各种有关支付、退款的例子,大家可以自己看看如果不想看的话可以直接用我发的。

退款:退款里面调用的文件在 https://pan.baidu.com/s/1eRIVVGm 这里面

/*
 * 退款测试
 */
public function refund(){
    require_once ‘public/stripe-php-3.20.0/init.php‘;
    \Stripe\Stripe::setApiKey("sk_test_BQokikJOvBiI2HlWgH4olfQ2");

    $re = \Stripe\Refund::create(array(
        "charge" => "ch_18lF8dEm2C3rQ9STPtScvnth",
        "amount" => "50",
    ));
    echo "<pre>";
    var_dump($re);die;
}

支付宝 支付demo

支付宝官网demo地址:https://b.alipay.com/order/techService.htm

打开连接后在最下面有所有的demo

支付宝退款

    /**
     * 支付宝退款
     */
    function alipayapi(){
        header("Content-type: text/html; charset=utf-8");
        require_once ‘public/refund/alipay.config.php‘;
        require_once ‘public/refund/lib/alipay_submit.class.php‘;

        /**************************请求参数**************************/

        //批次号,必填,格式:当天日期[8位]+序列号[3至24位],如:201603081000001

        $batch_no = date(‘Ymd‘,time()).time();
        //退款笔数
        $batch_num = 1;
        //必填,参数detail_data的值中,“#”字符出现的数量加1,最大支持1000笔(即“#”字符出现的数量999个)

        //退款详细数据  2011011201037066^5.00^协商退款
        $detail_data = "2016051821001004370254817579^0.01^协商退款";

        /************************************************************/

//构造要请求的参数数组,无需改动
        $parameter = array(
            "service" => trim($alipay_config[‘service‘]),
            "partner" => trim($alipay_config[‘partner‘]),
            "notify_url"   => trim($alipay_config[‘notify_url‘]),
            "seller_user_id"   => trim($alipay_config[‘seller_user_id‘]),
            "refund_date"  => trim($alipay_config[‘refund_date‘]),
            "batch_no" => $batch_no,
            "batch_num"    => $batch_num,
            "detail_data"  => $detail_data,
            "_input_charset"   => trim(strtolower($alipay_config[‘input_charset‘]))

        );
//建立请求
        $alipaySubmit = new \AlipaySubmit($alipay_config);
//        echo "<pre>";
//        var_dump($alipaySubmit);die;
        $html_text = $alipaySubmit->buildRequestForm($parameter,"get", "确认");
        echo $html_text;
    }

微信退款

    /*
     * 订单退款
     */
    static function wx_tui($order_id,$order){
        // 引入微信api
        require_once "./api/wxpay/lib/WxPay.Api.php";
        $input = new \WxPayRefund();
        $input->SetTransaction_id($order_id);
        $input->SetTotal_fee(1);
        $input->SetRefund_fee(1);
        $input->SetOut_refund_no(\WxPayConfig::MCHID . date("YmdHis"));
        $input->SetOp_user_id(\WxPayConfig::MCHID);
        $result = \WxPayApi::refund($input);
//      var_dump($result);
//        F(‘wxrefund‘ . setName(), $result);
        // 更新退款信息
        if ($result[‘return_code‘] == "SUCCESS")
        {
            $time = time();
            // 更新订单状态
            M("order")->where("order_id = {$order[‘order_id‘]}")
                ->save(array(‘refund_price‘=>$order[‘total_price‘],
                    ‘user_confirm_refund‘=>1,
                    ‘refund_status_time‘=>$time,
                    ‘refund_status‘=>1,
                    ‘pay_status‘=>6));
//            M("orders")->where(array("trade_no" => $trade))->save($saveData);
        }
    }

微信提现

  微信提现的前提需要开启    

   功能

    //微信提现
    public function wxtix(){
        $date[‘device_info‘] = post("access_token");//微信支付分配的终端设备号
        $date[‘openid‘] = post("openid");//商户appid下,某用户的openid
        $date[‘amount‘] = post("money",1);//企业付款金额,单位为分
        $user_id = (int)post("user_id");
        ksort($date);
        $string = $this->ToUrlParams($date);
        $string = substr(md5(‘kaimi‘.$string."kaimi"),8,16);
        $secret = post("secret",‘‘);//加密字段
        if($string!=$secret){
            $this->showCode(-2, array());
        }
        $user_wallet = M("user_wallet")->where("user_id = {$user_id}")->find();
        if($user_wallet[‘wallet_money‘]<$date[‘amount‘]){
            $this->showCode(1, array(), ‘余额不足‘);
        }
        if(empty($date[‘device_info‘])||empty($date[‘openid‘])||empty($date[‘amount‘])){
            $this->showCode(-1, array(), ‘参数缺少‘);
        }
        $date[‘partner_trade_no‘] = "ti".time(). rand(10000, 99999);//商户订单号,需保持唯一性
        $date[‘amount‘] = $date[‘amount‘] * 100;
        $time = time();
        M("titrade_no")->add(array("user_id"=>$user_id,"type"=>2,"money"=>$date[‘amount‘]/100,"trade_no"=>$date[‘partner_trade_no‘],"ctime"=>$time));
        $data = $this->wx_tixian($date);
        if($data[‘return_code‘]==‘SUCCESS‘||$data[‘result_code‘]==‘SUCCESS‘){
            M("user_wallet")->where("user_id = {$user_id}")->setDec("wallet_money",$date[‘amount‘]/100);
            $time = time();
            M("titrade_no")->where("trade_no = {$data[‘partner_trade_no‘]} and user_id = {$user_id}")->save(array(‘ti_time‘=>$time,‘status‘=>1));
            $this->showCode(0, array(), ‘提现成功‘);
        }else{
            $this->showCode(1, array(), ‘提现失败‘);
        }
    }

    /**
     * @param $date
     * 生成签名
     */
    public function sign($date){
        //签名步骤一:按字典序排序参数
        ksort($date);
        $string = $this->ToUrlParams($date);
        //签名步骤二:在string后加入KEY
        $string = $string . "&key=".\WxPayConfig::KEY;
        //签名步骤三:MD5加密
        $string = md5($string);
        //签名步骤四:所有字符转为大写
        $result = strtoupper($string);
        return $result;
    }
    /**
     * 格式化参数格式化成url参数
     */
    public function ToUrlParams($date)
    {
        $buff = "";
        foreach ($date as $k => $v)
        {
            if($k != "sign" && $v != "" && !is_array($v)){
                $buff .= $k . "=" . $v . "&";
            }
        }

        $buff = trim($buff, "&");
        return $buff;
    }
    //生成XML
    function xml($arr){
        $str = "<xml>";
        foreach($arr as $k=>$v){
            $str .= "<{$k}>{$v}</{$k}>";
        }
        $str .= "</xml>";
        return $str;
    }
    /*
     * 微信提现
     */
    public function wx_tixian($data){
        header("Content-type: text/html; charset=utf-8");

        // 引入微信api
        require_once "./api/wxpay/lib/WxPay.Api.php";
        $date[‘mch_appid‘] = \WxPayConfig::APPID;//微信分配的公众账号ID(企业号corpid即为此appId)
        $date[‘mchid‘] = \WxPayConfig::MCHID;    //微信支付分配的商户号
        $date[‘nonce_str‘] = ‘kaimi‘ .time(). rand(10000, 99999); //随机字符串,不长于32位
        $date[‘partner_trade_no‘] = "ti".time(). rand(10000, 99999);//商户订单号,需保持唯一性
        /**
         * NO_CHECK:不校验真实姓名
         *FORCE_CHECK:强校验真实姓名(未实名认证的用户会校验失败,无法转账)
         *OPTION_CHECK:针对已实名认证的用户才校验真实姓名(未实名认证用户不校验,可以转账成功)
         */
        $date[‘check_name‘] = "NO_CHECK";
        $date[‘re_user_name‘]  = ""; //收款用户真实姓名。  如果check_name设置为FORCE_CHECK或OPTION_CHECK,则必填用户真实姓名
        $date[‘desc‘] = "提现"; //企业付款操作说明信息。必填。
        $date[‘spbill_create_ip‘] = $_SERVER["REMOTE_ADDR"]; //调用接口的机器Ip地址
        $date[‘sign‘] = $this->sign($date);                //签名
        $data = $this->xml($date);
        $ch = curl_init();
        $MENU_URL = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers";
        curl_setopt($ch, CURLOPT_URL, $MENU_URL);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

        $zs1 = \WxPayConfig::getSSLcertPath();
        $zs2 = \WxPayConfig::getSSLKeyPath();
        curl_setopt($ch, CURLOPT_SSLCERT, $zs1);
        curl_setopt($ch, CURLOPT_SSLKEY, $zs2);
// curl_setopt($ch, CURLOPT_USERAGENT, ‘Mozilla/5.0 (compatible; MSIE 5.01;
// Windows NT 5.0)‘);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

        $info = curl_exec($ch);

        if (curl_errno($ch)) {
            echo ‘Errno‘ . curl_error($ch);
        }
        curl_close($ch);
        $data = \WxPayResults::Init($info);
        return $data;
    }

微信官网接口地址:https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_2

微信支付

/**
     *  帮我买下单  微信支付
     */
    public function weipay(){
        $order_id = I("order_id");
        $money = I("money");
        if($order_id == ‘‘ || $money == ‘‘){
            $this->json("100090","缺少参数");
        }
        require_once "./public/weipay/lib/WxPay.Api.php";
        require_once "./public/weipay/example/log.php";
        require_once "./public/weipay/lib/WxPay.Config.php";
        $ordrTitle = "电达人订单支付";
        // 准备参数
        $notify_url = $_SERVER[‘HTTP_HOST‘]."/index.php/api/orders/order_callback_weipay";
        // 统一下单
        $input = new \WxPayUnifiedOrder();
        $input->SetBody($ordrTitle);
        $input->SetAttach($ordrTitle);
        $input->SetOut_trade_no($order_id);
        $input->SetTotal_fee($money * 100);
        $input->SetTime_start(date("YmdHis"));
        $input->SetNotify_url($notify_url);
        $input->SetTrade_type("APP");
        $input->SetSpbill_create_ip($_SERVER[‘REMOTE_ADDR‘]);//终端ip
        $order = \WxPayApi::unifiedOrder($input);
        //dump($order);die;
        if ($order[‘return_code‘] == ‘SUCCESS‘)
        {
            $wxvalue = array();
            $wxvalue[‘appid‘] = $order[‘appid‘];
            $wxvalue[‘prepayid‘] = $order[‘prepay_id‘];
            $wxvalue[‘partnerid‘] = $order[‘mch_id‘];
            $wxvalue[‘package‘] = ‘Sign=WXPay‘;
            $wxvalue[‘timestamp‘] = time();
            $wxvalue[‘noncestr‘] = \WxPayApi::getNonceStr();
            ksort($wxvalue); // 排序
            $wxstr = $this->ToUrlParams($wxvalue);
            $string = $wxstr . "&key=" . \WxPayConfig::KEY;
            // 签名步骤三:MD5加密
            $md5string = md5($string);
            $wxvalue[‘sign‘] = strtoupper($md5string);
            $wxvalue[‘title‘] = $ordrTitle;
            $new = $wxvalue;
            $new[‘order_id‘] = $order_id;
            //dump($new);die;
            $this->json(‘10001‘,$new);
            // json("10001", $wxvalue);

}else{
            $this->json(‘405‘, ‘支付生成失败,请联系我们‘);
        }
    }

/**
     * 微信支付回调
     */
    public function order_callback_weipay(){
        $arr = $_POST;
        if (empty($arr))
        {
            $xml = file_get_contents(‘php://input‘);
            $arr = $this->FromXml($xml);
        }
        if (array_key_exists(‘openid‘, $arr))
        {
            if($arr[‘result_code‘]=="SUCCESS"){
                $orderid = $arr[‘out_trade_no‘];
                $stas = M("order")->where("order_id=‘$orderid‘")->field("statics")->find();
                $static = $stas["statics"];
                if($static == 2){
                    $da["statics"] = 3;
                    $da["is_zhi"] = 1;
                } else {
                    $da["statics"] = 9;
                    $da["is_zhi"] = 2;
                }
                M("order")->where("order_id = {$arr[‘out_trade_no‘]}")->save($da);
            }
            //$info = json_decode($arr,true);
            //    M("weixin")->add($arr);
            //echo ‘<xml><return_code>SUCCESS</return_code><return_msg>OK</return_msg></xml>‘;
            echo "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
        }
    }

/**
     * 拼接key=>$value
     * @access public
     */
    protected function ToUrlParams ($wxarr)
    {
        $buff = "";
        foreach ($wxarr as $k => $v)
        {
            if ($k != "sign" && $v != "" && ! is_array($v))
            {
                $buff .= $k . "=" . $v . "&";
            }
        }

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

/**
     * xml数据转array
     * @param unknown $xml
     * @throws WxPayException
     * @return mixed
     */
    protected function FromXml ($xml)
    {
        if (! $xml)
        {
            return;
        }
        // 将XML转为array
        // 禁止引用外部xml实体
        libxml_disable_entity_loader(true);
        $data = json_decode(json_encode(simplexml_load_string($xml, ‘SimpleXMLElement‘, LIBXML_NOCDATA)), true);
        return $data;
    }

微信官网demo地址 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1
时间: 2024-10-06 04:55:21

第三方技术 支付 退款的相关文章

浅谈第三方电子支付平台测试方法的研究

第三方支付平台的功能和结构特点 在信用方面,第三方支付平台作为中介,在网上交易的商家和消费者之间作一个信用的中转,通过改造支付流程来约束双方的行为,从而在一定程度上缓解彼此对双方信用的猜疑,增加对网上购物的可信度. 在技术层面,第三方支付平台承担安全保障和技术支持的作用,提供一系列的应用接口程序,支持多家银行的多卡种支付,将多家签约银行的支付方式整合到一个界面上,负责交易结算中心与银行的对接.银行与商家通过接入第三方支付平台实现二次结算,并采用国际先进SSL加密模式,在银行.消费者和商家之间传输

C# 微支付退款申请接口 V3.3.6

/// <summary>/// 微支付退款申请/// </summary>/// <param name="context"></param>/// <param name="returnMsg"></param>/// <returns></returns>public bool Refund(HttpContext context, ref string retur

C# 微支付退款查询接口 V3.3.6

#region 微支付退款查询 string Nonce = CreateRandomCode(15).ToLower(); //生成15个随机字符string sign1 = "appid=" + PayHandle.AppID.ToString() + //微信公众号的APPID "&mch_id=" + PayHandle.MechID.ToString() + //商户号 "&nonce_str=" + Nonce + /

小黑式烂代码之微信APP支付 + 退款(JAVA实现)

首先,你得先有微信开发平台账号密码还需要开通应用,然后还有微信服务商平台商户版账号(这些我都是给产品经理拿的) 其次我认为你先去看一看微信开发平台的文档!  https://pay.weixin.qq.com/wiki/doc/api/index.html 这里有很多种支付,我就采用APP支付来说了(会了APP支付其实H5支付都差不多的!) 进来后是这样的,随便看看'APP支付那几篇文章'讲的流程!,看完后知道大概了就可以看看'API列表了' 我们后台开发需要关注的就是这三个API了! 1 /*

微信、支付宝各种支付退款

java 版微信.支付宝各种支付退款 前言 最近整理了一下自己做过的各种支付退款的业务,并整理如下,只是大致思路代码不保证百分百没有问题但是都是经过我以前实际验证过并投入生产环境的,省略了一些和支付无关的业务流程. java 微信App支付 参考时序图了解大致流程. 微信App支付文档 大致步骤: 步骤1:用户在商户APP中选择商品,提交订单,选择微信支付. 步骤2:商户后台收到用户支付单,调用微信支付统一下单接口.参见统一下单API. 步骤3:统一下单接口返回正常的prepay_id,再按签名

java使用AES-256-ECB(PKCS7Padding)解密——微信支付退款通知接口指定解密方式

1.场景 在做微信支付退款通知接口时,微信对通知的内容做了加密,并且指定用 AES256 解密,官方指定的解密方式如下: 2.导包 <!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on --> <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</art

快速申请第三方微信支付的办法充值对接口

一.第三方支付对网上银行业务发展的影响 第一.第三方支付的发展对银行网上银行业务带来的挑战 (一)银行中间业务收入受到影响 现如今,银行贷款业务的利差正在不断的减小,而在银行的盈利来源当中,中间业务的收入则变得愈加重要.但是,第三方支付业务则由于独特的交易担保功能以及更低的价格受到了消费者的青睐,在互联网支付领域当中占据了优势的地位,使得网上银行的发展空间受到了挤压.除此之外,用户在对第三方支付的账户进行注册之后,不需要利用对网上银行的注册就能够对大部分的支付需求进行实现,这就使得第三方支付对网

关于 第三方接口支付的时候 采用post提交的方式,有两种 一种是通过 curl来进行,一种是通过js当页面加载完后跳转

这是第一种.通过javascript页面加载完后,对表单采用 post方式提交给 第三方接口----- echo <<<_END<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.

asp.net mvc 接入最新支付宝支付+退款 alipay-sdk-NET-20170615110549

第1步: https://openhome.alipay.com/developmentDocument.htm 第2步:下载sdk和demo https://docs.open.alipay.com/270/106291/ https://docs.open.alipay.com/54/103419 第3步:将SDK放到解决方案下并在解决方案下打开下载下来的SDK项目 第4步:新建项目,项目中新建一个类存放支付宝配置相关信息 登录支付宝进入开发者中心 https://openhome.alip