微信小程序对接发货功能

注:微信小程序对接发货功能

文档地址:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/business-capabilities/order-shipping/order-shipping.html

php代码

common.php


use think\Config;
use think\Db;
use fast\Http;
use think\Cache;

if(!function_exists('getAccessToken')){
    //获取token
    function getAccessToken()
    {
        $site = Config::get("site");
        $appId = '';
        if(array_key_exists('WX_AppID',$site)){
            $appId = $site['WX_AppID'];
        }
        $appSecret = '';
        if(array_key_exists('WX_AppSecret',$site)){
            $appSecret = $site['WX_AppSecret'];
        }
        $cacheKey = $appId . '@access_token';
        if (!Cache::get($cacheKey)) {
            // 请求API获取 access_token
            $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appId}&secret={$appSecret}";
            $result = Http::get($url);
            $data = json_decode($result, true);
            // return $data['access_token'];
            // 写入缓存
            Cache::set($cacheKey, $data['access_token'], 5000);    // 7000
        }
        return Cache::get($cacheKey);
    }
}

if(!function_exists('getWxSendOrderStatus')){
    //获取发货订单信息
    function getWxSendOrderStatus($transaction_id)
    {
        $token = getAccessToken();
        $url = "https://api.weixin.qq.com/wxa/sec/order/get_order?access_token=" . $token;
        $data = [
            'transaction_id' => $transaction_id
        ];
        $data = json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
        $result = Http::post($url, $data);
        $result = json_decode($result, true);

        return $result;
    }
}

if(!function_exists('set_jump_path')){
    //设置微信发货后,消息跳转地址,不设置为默认
    function set_jump_path()
    {
        $token = getAccessToken();
        $url = "https://api.weixin.qq.com/wxa/sec/order/set_msg_jump_path?access_token=" . $token;
        $data = [
            'path' => 'page_zhanghushezhi/myOrder/myOrder?conmen=3', //待收货订单列表页面
        ];
        $data = json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
        Http::post($url, $data);
    }
}

if(!function_exists('sendDelivery')){
    //发货 物流15天自动确认,虚拟商品隔天自动确认
    function sendDelivery($order, $logistics_type=3)
    {
        set_jump_path();

        $token = getAccessToken();

        $express_name = "";
        $express_no = "";
        if ($logistics_type == 1) {
            $express_name = $order['express_name'];
            $express_no = $order['express_no'];
        }

        $data = [
            'order_key' => [
                'order_number_type' => 2,   //订单单号类型,用于确认需要上传详情的订单。枚举值1,使用下单商户号和商户侧单号;枚举值2,使用微信支付单号。
                'transaction_id' => $order['transaction_id']
            ],
            'logistics_type' => $logistics_type,//物流模式,发货方式枚举值:1、实体物流配送采用快递公司进行实体物流配送形式 2、同城配送 3、虚拟商品,虚拟商品,例如话费充值,点卡等,无实体配送形式 4、用户自提
            'delivery_mode' => 1,   //发货模式,发货模式枚举值:1、UNIFIED_DELIVERY(统一发货)2、SPLIT_DELIVERY(分拆发货) 示例值: UNIFIED_DELIVERY
            'shipping_list' => [
                [
                    'tracking_no' => $express_no,
                    'express_company' => $express_name,
                    'item_desc' => $order['item_desc'] ?? "订单发货信息"
                ]
            ],
            'upload_time' => date('Y-m-d\TH:i:sP', time()),
            'payer' => [
                'openid' => $order['openid']
            ]
        ];

        $urlss = "https://api.weixin.qq.com/wxa/sec/order/upload_shipping_info?access_token=" . $token;
        $data = json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
        $results = Http::post($urlss, $data);

        $results = json_decode($results, true);
        return $results;
    }
}

商家发货
在这里插入图片描述


    /**
     * 店铺对订单发货
     *
     * @ApiMethod (POST)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @param string $id  订单id
     */
    public function fahuo()
    {
        try {

            $user_id = $this->user_id;
            $shop_id = $this->shop_id;    // 商家id      
            $id = $this->request->param('id', '');
            if (!$id) {
                $this->error('订单id不能为空');
            }
            $LitestoreorderModel = new LitestoreorderModel();
            $order = $LitestoreorderModel->getOrderDetail($id, false);
            if ($LitestoreorderModel->hasError()) {
                $this->error($LitestoreorderModel->getError());
            }
            if ($order['shop_id'] != $shop_id) {
                $this->error('订单错误');
            }

            if ($order->fahuo($id) !== false) {
                if($order['paytype'] == 2){
                    // 获取微信发货订单信息
                    $wxorder = getWxSendOrderStatus($order['transaction_id']);
                    if($wxorder['errcode'] != 0){
                        $this->error('获取微信订单失败');
                    }
                    $order_state = $wxorder['order']['order_state']; //订单状态枚举:(1) 待发货;(2) 已发货;(3) 确认收货;(4) 交易完成;(5) 已退款。
                    if($order_state == 1){
                        $data = [
                            'transaction_id'=>$order['transaction_id'],
                            'openid'=>$this->openid,
                            'item_desc'=>'订单商品',
                        ];
                        $results = sendDelivery($data);
                        if ($results['errcode'] == 0) {
                            $this->success('发货成功!');
                        } else {
                            $this->error("发货失败:" . $results['errmsg']);
                        }
                    }
                }
                $this->success('发货成功');
            }
            $this->error($order->getError());
        } catch (Exception $e) {

            $this->error($e->getMessage());
        }
    }

小程序确认收货

//点击确认收货按钮。
wx.openBusinessView({
  businessType: 'weappOrderConfirm',
  extraData: {
    merchant_id: merchant_id,
    merchant_trade_no: order_no,
    transaction_id: transaction_id
  },
  success() {
    
  },
  fail() {
    
  },
  complete() {
  }
});

首页app.js里的onShow

onShow(options) {
    if(options.referrerInfo && options.referrerInfo.extraData && options.referrerInfo.extraData.req_extradata){
      let t_status = options.referrerInfo.extraData.status
      let req_extradata = options.referrerInfo.extraData.req_extradata
      if(t_status=="success"){
        
      }
    }
}    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/667778.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VS2022+QT5.15.2+MySQL8.4大集合

网上的教程都建议用Qt5,不要用6,不死心的尝试了整整一天失败了,乖乖用回5,qt5需要编译一下生成mysql的动态和静态库 1. mysql8.4安装 下载社区开发版,注意要64位 https://dev.mysql.com/downloads/mysql/ 配置一下数…

nacos连接异常did not find the Leader node;

目录 问题描述解决过程持久化节点真的是存在数据库吗? 问题描述 我搭建的是nacos伪集群,然后主要想着看看集群情况下,临时节点和持久节点的区别。 如果使用临时节点项目能够正常起来,一旦添加ephemeral: false项目就起不来了。 …

R语言绘图 --- 饼状图(Biorplot 开发日志 --- 2)

「写在前面」 在科研数据分析中我们会重复地绘制一些图形,如果代码管理不当经常就会忘记之前绘图的代码。于是我计划开发一个 R 包(Biorplot),用来管理自己 R 语言绘图的代码。本系列文章用于记录 Biorplot 包开发日志。 相关链接…

时序波形数据建模处理的新方法:python开发构建时序波形数据识别分析模型,以地震、滑坡等地质灾害场景为例

地震和滑坡等地质灾害对人类社会构成的威胁不容忽视。这些灾害的突然性和不可预测性使得预防与应对变得尤为困难。传统的监测和预警方法往往依赖于人工的数据分析和专家判断,这种方法不仅效率低下,而且成本高昂,更重要的是,它可能…

什么是做到?在做到平台怎么赚钱?

外语比较好的人,也可以在网上接单赚钱,下面就给大家分享一个翻译赚钱的靠谱平台——做到!: 做到! 简介 做到! 网于2011年6月份上线,是阿里巴巴旗下阿里翻译团队打造的语言众包平台,汇聚众多语言爱好者,提…

智能售货机加盟新契机

加盟智能售货机业务,尤其是在当前技术迭代迅速与市场需求高涨的背景下,正成为众多创业者积极探索的领域。以重庆臻奶惠为代表的企业,正利用其在智能科技与支付资讯的深厚底蕴,为有意涉足该行业的加盟者铺设了一条既稳健又具前瞻性…

python编程:创建 SQLite 数据库和表的图形用户界面应用程序

在本文中,我将介绍如何使用 wxPython 模块创建一个图形用户界面(GUI)应用程序,该应用程序允许用户选择 SQLite 数据库的存放路径、数据库名称、表名称,并动态添加字段及其类型。以下是具体的实现步骤和代码示例。 C:\p…

物联边缘网关有哪些功能?物联边缘网关在工业方向的应用-天拓四方

随着物联网技术的快速发展,越来越多的设备和系统正在接入到网络中,形成了一个庞大的智能生态系统。在这个系统中,物联边缘网关扮演着至关重要的角色,它不仅是连接设备和云端的桥梁,更是推动智能应用落地的关键。在当今…

反射获取构造方法

目录 利用反射获取构造方法 代码实现 获取class对象 ​编辑获取权限修饰符 获取参数 创建对象 利用反射获取构造方法 代码实现 Student类: 获取class对象 获取权限修饰符 获取参数 创建对象 因为con4的构造方法的权限修饰符是private,不能直接在测…

特征选择概述

提示:特征选择 文章目录 1, 什么是特征选择2,特征选择的过程2.1,特征子集的产生过程2.2,特征子集的评价准则2.3,特征选择的停止准则2.4,特征子集的分类验证 3, 特征选择的方法分类参…

摸鱼大数据——Hive函数4-6

4、类型转换函数 类型转换: cast(字段名称 as 想要的数据类型) 示例: -- 数据类型转换 -- string->int select cast("123" as int),"123"; ​ -- string->float/double select cast("123.555" as float),"123.555"…

绘画智能体分享

这是您请求的故宫雪景图,角落有一只可爱的胖猫,采用了水墨画风格,类似于张大千的作品。希望您喜欢这幅画! 🎨 选项 1【转变风格】——将这幅画转变为梵高的后印象派风格,增添一些梵高特有的笔触和色彩。 &…

【算法】位运算算法——消失的两个数字(困难)

题解:消失的两个数字(位运算算法) 目录 1.题目2.题解3.示例代码如下4.总结 1.题目 题目链接:LINK 2.题解 本题要求时间复杂度O(N),空间复杂度O(1),分别否了我们 排序遍历 和 哈希数组 的想法。想要在规定时间/空间复杂度内完成本题,需要借…

FreeRTOS实时系统 在任务中增加数组等相关操作 导致单片机起不来或者挂掉

在调试串口任务中增加如下代码,发现可以用keil进行仿真,但是烧录程序后,调试串口没有打印,状态灯也不闪烁,单片机完全起不来 博主就纳了闷了,究竟是什么原因,这段代码可是公司永流传的老代码了&…

戴尔向“数”而行,以“质”致远,做新质生产力的躬耕者

【全球存储观察 | 热点关注】 自1984年戴尔成立,一路走来,戴尔科技集团40年长期持续的技术创新,一直引领全球科技行业的技术趋势。 到如今,AIGC风行一时,在重塑千行百业的同时,也加速了科技行业…

解决安装 WP Super Cache 插件提示 Advanced-Cache.Php 是另一个插件创建的

昨天晚上一个站长求助明月,说是安装 WP Super Cache 插件的时候提示 advanced-cache.php 被占用了,无法完成安装,收到截图看了才明白原来提示的是“advanced-cache.php 文件,由另一个插件或者系统管理员创建的”,如下图…

java属性重写

介绍 关于,属性没有重写只能是编译类型的 代码 package b;public class main_ {public static void main(String[] args) {//向上转型,父类的引用转向了子类的fathetr fatnew son();System.out.println("编译类型是father时的sum属性是"fat.…

如何理解央行买卖国债?

浙商证券覃汉认为,央行对长债的风险持续关注,30年国债收益率较难突破2.5%,区间底部已经多次印证,在学习效应影响下,长端利率预计继续以震荡调整为主。 1、央行买卖国债的政策要求、历史经验、优势 2023年中央金融工作…

实现音乐创作梦想的利器——Cockos Reaper for Mac/win

在当今数字音频制作领域,专业人士和业余爱好者都在寻找一款功能强大、易于操作的软件来实现他们的音乐创作梦想。而Cockos Reaper作为一款跨平台的数字音频工作站软件,既适用于Mac系统,也适用于Windows系统,成为众多音乐制作人心目…