微信退款(一步步教你怎么写代码)

开始

  1. 我们到微信公众号下载SDK;
  2. 现在我们分两个框架CITP;(CI框架我们把SDK放到common下的libraries下);(TP框架我们把SDK放到根目录extend下)
  3. CI框架的操作流程
 /**
  * 微信退款流程
  */
public function refund_pay() {
    //获取当前订单的ID
    $order_id = $this->input->get('id', true);

    //查询当前订单的信息
    $order = $this->common_model->get_one('order', array('order_id' => $order_id));

    //判断这条订单是否存在,并存日志(如果不想存日志直接给个提示就行)
    if (empty($order)) {
        $this->log->save_log('根据订单ID查询不到信息', $log_file = RUN_QUERY_LOG, $level = 'DEBUG');
        return FALSE;
    }

    //微信退款操作
    require_once ROOT_PATH . "/common/libraries/wxpay/lib/WxPay.Api.php";
    $input = new WxPayRefund();

    $out_trade_no = WxPayConfig::MCHID . date("YmdHis") . mt_rand(10000, 99999);

    //设置商户系统内部的退款单号,商户系统内部唯一,同一退款单号多次请求只退一笔
    $input->SetOut_refund_no($out_trade_no);         

    //设置商户系统内部的订单号,transaction_id、out_trade_no二选一
    $input->SetTransaction_id($orderArr['out_sn']);

    //设置订单总金额,单位为分,只能为整数,详见支付金额
    $input->SetTotal_fee($orderArr['pay_price'] * 100);

    //设置退款总金额,订单总金额,单位为分,只能为整数,详见支付金额
    $input->SetRefund_fee($orderArr['weixin_pay_price'] * 100);

    //设置操作员帐号, 默认为商户号
    $input->SetOp_user_id(WxPayConfig::MCHID);
    $data = WxPayApi::refund($input);

    //退款成功
    if ($data['result_code'] == 'SUCCESS') {

    //更新订单状态
    $this->common_model->edit('order', array('return_time' => date('Y-m-d H:i:s', time())), array('order_id' => $order_id));
    }

4.TP框架的操作流程

 /**
  * 支付宝有密退款流程
  */
namespace app\controller;
use think\Db;
use wxpay\Wxpay;

class RefundController extends Controller{
    /**
     * 订单确认页面
     */
    public function index() {
    //获取当前订单ID
    $out_id = input('param.id');

    //获取当前订单基本信息
    $outOrder = db('out_order')->field('oto.*,o.*')->alias('oto')->where(['out_id' => $out_id])->join('__ORDER__ o', 'o.order_id=oto.order_id')->find();

    //判断订单是否存在
    if (empty($outOrder)) {
        $this->error('该订单不存在', '', '', '');
    }

    //判断订单是否重复提交
    if ($outOrder['state'] == '110' && $outOrder['out_status'] == '1') {
        $this->error('请勿重复提交订单', '', '', '');
    }

    $data = [
         'refund_no' => date('Ymdhis', time()) . substr(floor(microtime() * 1000), 0, 1) . rand(0, 9),
         //退款数量
         'refund_num' => '1',
         //buyer_id买家支付宝账号或者iD^out_price退款金额^'备注'
         'refund_data' => $outOrder['buyer_id'] . '^' . $outOrder['out_price'] . '^' . '测试退款',
            ];
        return $this->fetch('outorder/refund', $data);

    }

    /**
     * 确认支付
     * 发送请求到支付宝(会跳转到支付宝页面等待用户支付)
     */
    public function refund() {
        require_once EXTEND_PATH . 'Alipay_refund/alipayapi.php';
    }

    /**
     * 支付宝异步回调方法
     */
    public function notifyurl() {
        require_once EXTEND_PATH . 'Alipay_refund/notify_url.php';
        $alipayNotify = (new AlipayNotify())->verifyReturn();
        $alipayNotify->verifyReturn();
    }



}

猜你喜欢

转载自blog.csdn.net/u013257111/article/details/65446194