2017-05-01 16:41:08 y_f_raquelle 阅读数 3544
  • 自己开发一套微信支付接口(SDK)-微信开发15(PHP)

    会员免费看,http://edu.csdn.net/lecturer/842 边栏可办理会员卡。自己开发一套微信支付接口(SDK)是子恒老师《子恒说微信开发》视频教程的第15部。详细讲解了用php开发一套自己的微信支付接口。内容包含微信支付开发思路,基础类开发,微信支付接口应用,公众号发红包,企业付款等等。欢迎反馈,微信号:QQ68183131

    5406 人正在学习 去看看 秦子恒

微信公众平台开发者文档:http://mp.weixin.qq.com/wiki/home/index.html


首先申请一个微信公众开发测试账号:http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login


申请后会提供appID和appsecret,你需要在自己的代码中添加接口配置的处理。

但此处URL必须为一个公网地址,且使用80端口,这就涉及到之前讲到的公网映射的方式。通常使用ngrok,注册后获得authtoken并配置,使用ngrok http <port>即可将指定端口映射到公网80端口。

接口配置的java示例:(参考Journey的博客

@WebServlet(urlPatterns = "/wx", name = "wxHouseKeeperServlet")  
public class HouseKeeper extends HttpServlet {  
    public static final String TOKEN = "mzmzo";  
  
    @Override  
    protected void doGet(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  
        try {  
            // 开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数  
            String signature = request.getParameter("signature");// 微信加密签名(token、timestamp、nonce。)  
            String timestamp = request.getParameter("timestamp");// 时间戳  
            String nonce = request.getParameter("nonce");// 随机数  
            String echostr = request.getParameter("echostr");// 随机字符串  
            PrintWriter out = response.getWriter();  
            // 将token、timestamp、nonce三个参数进行字典序排序  
            String[] params = new String[] { TOKEN, timestamp, nonce };  
            Arrays.sort(params);  
            // 将三个参数字符串拼接成一个字符串进行sha1加密  
            String clearText = params[0] + params[1] + params[2];  
            String algorithm = "SHA-1";  
            String sign = new String(  
                    Hex.encodeHex(MessageDigest.getInstance(algorithm).digest((clearText).getBytes()), true));  
            // 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信  
            if (signature.equals(sign)) {  
                response.getWriter().print(echostr);  
            }  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }     
}  

此处TOKEN与网页中填写的Token一致即可

接下来配置“网页授权获取用户基本信息


注意填写时不用加http://,只填写域名即可。

完成后扫描下方二维码即可关注自己的公众测试号,网页中会显示关注用户的Openid。

下载微信Web开发工具,即可模拟手机调试


完成登录和绑定后,开发者就可以开始调试微信网页授权,在地址栏直接输入URL

示例: https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx841a97238d9e17b2&redirect_uri=http://cps.dianping.com/weiXinRedirect&response_type=code&scope=snsapi_base&state=type%3Dquan%2Curl%3Dhttp%3A%2F%2Fmm.dianping.com%2Fweixin%2Faccount%2Fhome

这里appid填写之前注册后得到的,redirect_uri指向自己的公网域名下的url,response_type为code,scope为snsapi_base表示静默授权,state填写uri后的mapping。注意这里的redirect_uri和state可能需要urlencode。








2016-04-20 11:46:00 qq_22889431 阅读数 10
  • 自己开发一套微信支付接口(SDK)-微信开发15(PHP)

    会员免费看,http://edu.csdn.net/lecturer/842 边栏可办理会员卡。自己开发一套微信支付接口(SDK)是子恒老师《子恒说微信开发》视频教程的第15部。详细讲解了用php开发一套自己的微信支付接口。内容包含微信支付开发思路,基础类开发,微信支付接口应用,公众号发红包,企业付款等等。欢迎反馈,微信号:QQ68183131

    5406 人正在学习 去看看 秦子恒

微信开发测试号配置

1.进入微信测试平台

2.配置接口信息

  URL:开发模式下的验证token的url

  token:‘token’

3.网页服务--》网页账号 --》 修改授权回调页面域名:[此处的回调域名是你的域名,不能添加http://字样,只需要写域名就可以了]

4.程序里spring配置文件【配置token、appid、appsecret】的文件里

这时候在手机微信平台就可以看到开发的网页内容了

posted @ 2016-04-20 11:46 水车 阅读(...) 评论(...) 编辑 收藏
2018-03-23 18:07:38 u014740338 阅读数 3780
  • 自己开发一套微信支付接口(SDK)-微信开发15(PHP)

    会员免费看,http://edu.csdn.net/lecturer/842 边栏可办理会员卡。自己开发一套微信支付接口(SDK)是子恒老师《子恒说微信开发》视频教程的第15部。详细讲解了用php开发一套自己的微信支付接口。内容包含微信支付开发思路,基础类开发,微信支付接口应用,公众号发红包,企业付款等等。欢迎反馈,微信号:QQ68183131

    5406 人正在学习 去看看 秦子恒

微信打开开发者模式后,以前通过微信后台配置的菜单就失效了,需要通过我们自己服务器后台配置(需要开发),还有一种比较简单的方法,就是通过微信提供的“微信公众平台接口测试工具”进行配置。下面重点说一下通过微信提供的测试工具进行配置的过程。

一、进入微信接口调试页面

地址:https://mp.weixin.qq.com/debug


接口类型选择“自定义菜单”

接口列表选择“自定义菜单创建接口/menu/create”

接口参数:

access_token: 是公众号访问接口用的,需要填写要修改的公众号access_token

body: 创建菜单的JSON串。示例如下:

示例一:(创建两个一级按钮菜单)

{
    "button": [
        {
            "type": "view", 
            "name": "报名邀请", 
            "url": "https://blog.csdn.net/u014740338"
        }, 
        {
            "type": "view", 
            "name": "我的博客", 
            "url": "https://blog.csdn.net/u014740338"
        }
    ]
}

我创建的是连个view类型的菜单,也可以创建click类型的。

示例二:(创建一级菜单+二级菜单)

{
	"button": [{
		"type": "view",
		"name": "技术积累",
		"url": "https://blog.csdn.net/u014740338"
	},
	{
		"name": "工作",
		"sub_button": [{
			"type": "view",
			"name": "遇到的bug",
			"url": "https://blog.csdn.net/u014740338"
		},
		{
			"type": "view",
			"name": "工作记录",
			"url": "https://blog.csdn.net/u014740338"
		}]
	},
	{
		"type": "view",
		"name": "我的博客",
		"url": "https://blog.csdn.net/u014740338"
	}]
}

body写好之后点击“检查问题”按钮。若创建成功会返回一下信息:


若创建失败,检查access_token是否正确。

若没有公众号来玩,可以自己申请一个测试账号,具体流程可以参考我上篇博客。

2016-06-12 11:24:10 w410589502 阅读数 1893
  • 自己开发一套微信支付接口(SDK)-微信开发15(PHP)

    会员免费看,http://edu.csdn.net/lecturer/842 边栏可办理会员卡。自己开发一套微信支付接口(SDK)是子恒老师《子恒说微信开发》视频教程的第15部。详细讲解了用php开发一套自己的微信支付接口。内容包含微信支付开发思路,基础类开发,微信支付接口应用,公众号发红包,企业付款等等。欢迎反馈,微信号:QQ68183131

    5406 人正在学习 去看看 秦子恒

在我们启用开发者模式之后,我们就可以进行接口的配置了

1、接口配置信息

  登录微信公众平台官网后,在公众平台后台管理页面 - 开发者中心页,点击“修改配置”按钮,填写服务器地址(URL)、Token和EncodingAESKey,其中URL是开发者用来接收微信消息和事件的接口URL。Token可由开发者可以任意填写,用作生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性)。EncodingAESKey由开发者手动填写或随机生成,将用作消息体加解密密钥。


  我们需要填入URL和Token,EncodingAESKey点击即可自动生成。URL指的是能够接收处理微信服务器发送的GET/POST请求的地址,并且是已经存在的,现在就能够在浏览器访问到的地址,这就要求我们先把公众帐号后台处理程序开发好(至少应该完成了对GET请求的处理)并部署在公网服务器上。

  也就是说要完成接口配置,只需要先完成微信服务器的GET请求处理就可以?是的。 那这是为什么呢?因为这是微信公众平台接口中定义的。具体请参考API文档-消息接口-消息接口指南中的网址接入部分。

  同时,开发者可选择消息加解密方式:明文模式、兼容模式和安全模式。模式的选择与服务器配置在提交后都会立即生效,请开发者谨慎填写及选择。加解密方式的默认状态为明文模式,选择兼容模式和安全模式需要提前配置好相关加解密代码,详情请参考消息体签名及加解密部分的文档。


2、验证服务器有效性


3、创建公众帐号后台接口程序

创建一个Java Web工程,并新建一个能够处理请求的Servlet,代码如下:

package org.liufeng.course.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.liufeng.course.service.CoreService;
import org.liufeng.course.util.SignUtil;

/**
 * 核心请求处理类
 * 
 * @author liufeng
 * @date 2013-05-18
 */
public class CoreServlet extends HttpServlet {
	private static final long serialVersionUID = 4440739483644821986L;

	/**
	 * 确认请求来自微信服务器
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 微信加密签名
		String signature = request.getParameter("signature");
		// 时间戳
		String timestamp = request.getParameter("timestamp");
		// 随机数
		String nonce = request.getParameter("nonce");
		// 随机字符串
		String echostr = request.getParameter("echostr");

		PrintWriter out = response.getWriter();
		// 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败
		if (SignUtil.checkSignature(signature, timestamp, nonce)) {
			out.print(echostr);
			System.out.println("微信服务验证成功!");
		}
		out.close();
		out = null;
	}

	/**
	 * 处理微信服务器发来的消息
	 */
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 将请求、响应的编码均设置为UTF-8(防止中文乱码)
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");

		// 调用核心业务类接收消息、处理消息
		String respMessage = CoreService.processRequest(request);
		
		// 响应消息
		PrintWriter out = response.getWriter();
		out.print(respMessage);
		
		out.close();
	}

}
在doGet方法中调用了checkSignature方法,SignUtil.java的实现如下:

package org.liufeng.course.util;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;

/**
 * 请求校验工具类
 * 
 * @author liufeng
 * @date 2013-05-18
 */
public class SignUtil {
	// 与接口配置信息中的Token要一致
	private static String token = "weixin";

	/**
	 * 验证签名
	 * 
	 * @param signature
	 * @param timestamp
	 * @param nonce
	 * @return
	 */
	public static boolean checkSignature(String signature, String timestamp, String nonce) {
		String[] arr = new String[] { token, timestamp, nonce };
		// 将token、timestamp、nonce三个参数进行字典序排序
		Arrays.sort(arr);
		StringBuilder content = new StringBuilder();
		for (int i = 0; i < arr.length; i++) {
			content.append(arr[i]);
		}
		MessageDigest md = null;
		String tmpStr = null;

		try {
			md = MessageDigest.getInstance("SHA-1");
			// 将三个参数字符串拼接成一个字符串进行sha1加密
			byte[] digest = md.digest(content.toString().getBytes());
			tmpStr = byteToStr(digest);
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}

		content = null;
		// 将sha1加密后的字符串可与signature对比,标识该请求来源于微信
		return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;
	}

	/**
	 * 将字节数组转换为十六进制字符串
	 * 
	 * @param byteArray
	 * @return
	 */
	private static String byteToStr(byte[] byteArray) {
		String strDigest = "";
		for (int i = 0; i < byteArray.length; i++) {
			strDigest += byteToHexStr(byteArray[i]);
		}
		return strDigest;
	}

	/**
	 * 将字节转换为十六进制字符串
	 * 
	 * @param mByte
	 * @return
	 */
	private static String byteToHexStr(byte mByte) {
		char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
		char[] tempArr = new char[2];
		tempArr[0] = Digit[(mByte >>> 4) & 0X0F];
		tempArr[1] = Digit[mByte & 0X0F];

		String s = new String(tempArr);
		return s;
	}
}


4、配置web.xml文件

这里唯一需要注意的就是SignUtil类中的成员变量token,这里赋予什么值,在接口配置信息中的Token就要填写什么值,两边保持一致即可,没有其他要求,建议用项目名称、公司名称缩写等,我在这里用的是项目名称weixin。
最后再来看一下web.xml中,CoreServlet是怎么配置的,web.xml中的配置代码如下:

<?xml version="1.0" encoding="UTF-8"?>  
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
    <servlet>  
        <servlet-name>coreServlet</servlet-name>  
        <servlet-class>  
            org.liufeng.course.servlet.CoreServlet  
        </servlet-class>  
    </servlet>  
  
    <!-- url-pattern中配置的/coreServlet用于指定该Servlet的访问路径 -->  
    <servlet-mapping>  
        <servlet-name>coreServlet</servlet-name>  
        <url-pattern>/coreServlet</url-pattern>  
    </servlet-mapping>  
  
    <welcome-file-list>  
        <welcome-file>index.jsp</welcome-file>  
    </welcome-file-list>  
</web-app>
已经完成简单的接口配置,之后我们可以将web项目打成war包,发布到百度云,阿里云,新浪云上。我使用的是阿里云服务器。发布到服务器之后,访问coreServlet。


说明配置成功。代码包空指针异常是因为直接在地址栏访问coreServlet,就相当于提交的是GET请求,而我们什么参数都没有传,在验证的时候当然会报空指针异常。

接下来,把coreServlet的访问路径拷贝下来,再回到微信公众平台的接入配置信息界面,将coreServlet的访问路径粘贴到URL中,并将SignUtil类中指定的token值weixin填入到Token中。




2016-09-06 15:14:27 LanBuff 阅读数 1748
  • 自己开发一套微信支付接口(SDK)-微信开发15(PHP)

    会员免费看,http://edu.csdn.net/lecturer/842 边栏可办理会员卡。自己开发一套微信支付接口(SDK)是子恒老师《子恒说微信开发》视频教程的第15部。详细讲解了用php开发一套自己的微信支付接口。内容包含微信支付开发思路,基础类开发,微信支付接口应用,公众号发红包,企业付款等等。欢迎反馈,微信号:QQ68183131

    5406 人正在学习 去看看 秦子恒
我们前一篇已经讲了,微信平台(不管是订阅号还是服务号)和我们的网站进行交互时,都是通过微信平台开放给外部系统的接口调用来实现的,也就是说,粉丝向公众号发送一次交互(文字,图片,声音或者菜单点击都算交互)后,微信平台会向你配置的url所对应的网站发出调用请求,来执行你的网站的代码,在代码中你进行各种处理后返回一个处理结果。

           你的网站具体使用什么语言来开发取决于你自己的爱好,不过我建议大家使用php来做,因为目前做web开发php是最方便的,当然你也可以用java写,没关系的,我们以php为例说明。

         微信平台在配置url时会验证一下你对应的这个url的网站是否真实存在,是否是你自己的网站。验证的原理很简单,你首先填写一个Token(你不用管这个是什么,只要记住它其实就是一个字符串符号,用来生成一个代表你自己身份的签名),然后填写你的网站的url,点击提交,如下图。


            平台就会向这个url所对应的网站发送一个GET请求,同时携带4个参数。参数参考图2的说明。如下图。



       其中timestamp是一个时间戳。时间戳其实就是从 1970年 1月1日至当前时间的总秒数。你就数吧,从1970年 1月 1日到我们现在这个时刻一共流逝了多少秒那么这个时间戳就是多少。所以时间戳任何时刻都是不同的。Nonce和echostr都是平台产生的随机数。Signature也就是签名,它是经过如下计算得到的:

       将当前时间戳(timestamp),nonce以及你输入的TOKEN按照字母顺序排序后拼接在一起形成一个字符串。例如: timestamp是345632,nonce是132a,TOKEN是123,那么我们先按照字母顺序排列,得到这样的顺序:123,132a,345632.然后拼接得到:123132a345632.最后经过SHA1加密运算得到签名Signature:E69E5E13D8B045923EF1BE38DF938F5621CA3004。SHA1是一个加密算法,细节这里就不讲了。这些参数一会都会通过查询参数的形式发送给我们网站的。

为了能够接受这些参数我们需要一个自己的php网站。Ok,我们现在就开始搭建这样的一个网站。

       1. 先下载WAMP集成安装套件,这个很简单,大家一路点击“下一步”,最后点击一下“完成”就可以了,我是直接安装在C盘根目录的,安装好了以后的目录结构 如下图. 安装完成后我们可以看到,我们需要的apache,mysql和php都已经安装好了,而且默认帮你安装了一个管理工具,非常方便。最重要的就是www这个目录,这个是就我们即将要创建的网站的根目录。



2. 进入www目录,新建一个index.php的文件,在里面只写入一行代码,如下图所示。




              然后在浏览器里面输入localhost,如果出现上图的页面,说明我们的服务器环境是已经ok,我们就可以继续下一步了。

 3.      接下来,我们开始代码处理。我们首先获取平台传过来的4个参数,

 

具体的代码见下面,里面已经有很详细的说明了哦。这里再说一下,为什么使用php,大家看到没有,用php 代码只有不到100行,而我之前用java实现过同样的功能,却花了500多行,这得益于php的很多函数以及帮我们做好了,我们可以直接使用。所以,php特别适合中小型网站的哦开发哦。大家也可以用其他语言换个方式实现一下试试。






        这里再补充解释一下上面的代码:代码的处理过程是这样的,将传过来的时间戳timestamp,随机数nonce和你自己输入的TOKEN(你自己输入的,所以当然知道TOKEN是多少)排序,拼接,SHA1处理,最后得到一个签名。

 

        因为我们得到这个签名的过程和平台处理的过程是一模一样的,所以我们得到的签名和平台发送给我们的签名Signature的值应该是一模一样的。

        将得到的结果和传过来的签名Signature比较,如果相等,就返回echostr(echostr也是平台发给我们的参数哦)给平台,告诉平台我已经接受到了你的请求,而且这个请求在网络传输的过程中没有被篡改(因为签名相等)。这样验证就通过了,相当于和平台和我们的网站之间建立了一个可信的通信通道。

     如果你看到平台显示下面的信息,说明验证通过了,你就可以正式开始你的微信开发了。





.2. 使用php开发微信服务器端


          我们的微信商城其实就是一个web程序,只不过这个web程序的客户端不再是浏览器而是微信平台了,所以,任何支持web服务器端开发的语言都可以作为我们微信商城的开发语言,例如Java、php等。为什么这里我选择php呢,因为php是目前为止最适合web开发的语言,而且随着我们的深入,你会发现php在web开发上的强大之处,很多java要很多行代码才能够实现的功能,php只要一句代码就可以很好的实现了。所以,我们选择php作为我们的示例开发语言。

        那么,大家在使用php开发时,我相信一提到调试,很多人还是会觉得很头疼,特别是新手更加是这样。我见过很多人抱怨php调试非常不方便,只能使用一些echo,print等输出语句输出变量值来进行调试,这样的确是非常麻烦的,因为这些输出语句无法设置断点。所以,我这里首先帮大家解决php断点调试的问题,因为没有这个断点调试的“利器”,以后的开发中出现问题,你想解决是很痛苦的。

       说起php的断点调试,我相信很多同学首先想到的就是zend studio+zend debugger,没错,你可以这么做,但是,这么做就意味着你需要手动配置很多东西,而且还不一样能保证停留在断点处。这里,我就不饶湾子了,我教大家一个很方便的工具,直接安装一下就可以原来调试php了。

       这个工具就是XAMPP+PhpEclipse的组合,其中XAMPP是一个集成安装包,里面包括了:Apache, MySQL、PHP和Perl。XAMPP其中的A代表Apache,M代表MySQL,第一个P代表PHP,第2个P代表Perl.这个工具自身携带了php调试功能xdbug,大家安装以后几乎不需要特意配置就可以用来调试php了。

 

 

下面请跟着我一步步来操作:

1.打开http://www.apachefriends.org/zh_cn/download.html,下载XAMPP for Windows1.8.2 & 1.8.3


2.     解压该压缩包,并双击    xampp-win32-1.8.0-VC9-installer.exe

3.       一路点Next,在选择文件安装位置时,选择安装在C:\盘根目录。




4.  等待安装



5. 完成。



6.     完成后会自动打开控制面板。其中1处是启动各种服务的按钮,2 是配置各种服务的按钮,3是查看各种服务的日志的按钮。

7.    点击Apache,MySql   的Start按钮,启动apache web服务器和mysql 数据库服务器,如下图,能看到Pid和ports的下方出现了 值 时表示服务启动成功 。

     如果出现启动报错时,检查一下是否 相关的端口被占用了,修改配置文件里面的相关端口的配置后再重新启动试试。




     下载并解压phpeclipse,点击运行,你会发现聪明的phpeclipse已经自动发现了xampp,并且已经自动帮你配置好了。




        接下来很重要的一步,我们将创建一个php网站项目,并且验证一下我们的xampp是否能对我们的php网站进行调试。只有我们的调试能正常进行,以后的课程中我才能一步步的帮大家分析微信平台和我们的网站的交互过程的细节,大家才能真正明白原理,然后大家在实际中遇到问题时也可以使用调试来分析解决。

 

       1.    首先,新建一个php项目 。增加一个php文件,里面随便加一些最简单的代码。并设置几个断点。这里注意:设置断点时一定不要双击来设置,一定要通过在左侧右键,然后在弹出的右键菜单里面选择:“Toggle Xdebug BreakPoint”来设置。这是因为双击设置的是java的断点,而我们是需要对php设置断点,必须通过右键的方式来设置,这样设置的才是php的断点,这样的断点XDebug才可以识别。否则,你很容易会出现莫名其妙的无法在断点处停住的问题。







2.   接下来,打开我们的xampp的安装目录,我的是:C:\xampp\php,用记事本打开里面的php.ini配置文件。我们要把里面的最后一部分关于xdebug的配置前的注释打开。修改好之后的截图如下:







       这样,我们就打开了xampp的xdebug调试功能。如果你不是很肯定是否已经打开了该调试功能,可以自己创建任意一个php项目,在里面写上一个文件,在该文件里面写上:phpinfo();然后执行以下,看看是否有如下输出:





3.      这样,我们已经完成了服务器端的配置。接下来需要在我们的phpeclipse里面设置一下,让我们的ide能够和我们服务器端的xdebug通信。跟我来。打开windows-prefrences下面的phpeclipse,按照如下图所示 检查是否配置正确。




4.       接下来就可以测试一下我们的调试功能是否能正常调试了。一起来。在file.php上右击,选择debug as->debugconfiguration   




5.   配置 完保存后,以后调试时,只需要在工具栏的那个debug图标下选择我们刚才的配置就可以进行调试了,如下图。







6.      这时,我们在phpeclipse里面自带的浏览器或者在ie浏览器里面输入:http://localhost:8080/phpTest/file.php?XDEBUG_SESSION_START=testID
注意后面的参数:XDEBUG_SESSION_START=testID这里的testID 就是我们之前在debug配置里面设置的标识字符串。如图。




7. 最后,停在断点的效果如下图所示。





     有了断点单步调试的功能,接下来我们不管做什么php网站,都方便很多了。在下一讲,我将结合php单步调试给大家深入分析微信商城开发的原理。

微信开发流程

阅读数 682

没有更多推荐了,返回首页