手机app怎么php调用mysql数据库php操作数据库的接口

App微信支付 php后台接口
App微信支付 php后台接口
本问将介绍App微信支付()的(7.0)后台支付和回调接口,框架是Thinkphp5.0:
账户的各种参数
请求prepay_id
*返回APP数据处理
修改订单状态
账户的各种参数
账户的各种参数就是像微信申请app支付的时候会给你的账户邮箱发邮件,里面会有对应的微信支付分配的商户号(MCHID),APPID和APPSECRET是在申请app支付权限的时候返回的,还有KEY需要自己在用户微信的商家后台里面自己设置的,这个很重要!避免外泄!
**客户端会把购物车里面的商品数据传到后台,还包括用户的信息等,拿到数据后首先需要验证这些数据,这里的验证一般都会在项目初期就和客户端定好传输规则,比如传输方式,参数名,验证参数的方式,这里的重点就是验证,一般都会采用签名认证的方式:
//签名步骤一:按字典序排序参数;
这里给出(格式化参数格式化成url参数)代码实例:
* 格式化参数格式化成url参数
public function ToUrlParams()
$buff = &&;
foreach ($this-&values as $k =& $v)
if($k != &sign& && $v != && && !is_array($v)){
$buff .= $k . &=& . $v . &&&;
$buff = trim($buff, &&&);
//签名步骤二:在string后加入KEY(这个KEY与前端人员协商而定);
//签名步骤三:MD5;
//签名步骤四:所有字符转为大写
这些最好在项目初期就封装好,后期会只要调用就好,例:
(后期只需要, $param = $this-&request('参数名'));即可), 然后将订单信息预存储.
请求prepay_id
这里我就直接上代码吧,(这里给出接口文档下载地址:),虽然网上也有很多自己写请求接口,但是既然微信已经封装好了,用就行了:
$input = new \app\wxpay\WxPayUnifiedOrder();//这里引用微信的统一下单接口
$input-&SetBody($data['gname']['g_name']);//商品或支付单简要描述
$input-&SetAttach($data['gname']['g_name']);//置附加数据
$input-&SetOut_trade_no($order_sn); // 商户订单号
$input-&SetTotal_fee(intval($data['data']['order_price']*100));
$input-&SetTime_start(date(&YmdHis&));//订单生成时间
$input-&SetTime_expire(date(&YmdHis&, time() + 600));//订单失效时间
$input-&SetGoods_tag($data['gname']['g_name']); //商品标记
$input-&SetNotify_url(&https://www.weixin.qq.com/wxpay/notify.php&); // 支付成功后的回调地址,
$input-&SetTrade_type(&APP&);
$order = \app\wxpay\WxPayApi::unifiedOrder($input);
return $order['prepay_id'];
这里给出微信官方统一下单接口说明地址:
https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1
返回客户端信息
$info = array();
//账号的信息一般都放在配置文件里面,用到的地方也很多
$info['appid'] = config('APP_APPID');
$info['partnerid'] = config('APP_MCHID');
$info['package'] = config('APP_PACKAGE');
$info['noncestr'] = $this-&random_number();//生成随机数,下面有生成实例,统一下单接口需要
$info['timestamp'] = time();
$info['prepayid'] = $prepay_
$info['sign'] = self::_makeSign($info);//生成签名
$info就是客户端需要的信息啦
生成随机数实例
//生成随机数
public function random_number($len=21,$format='ALL' ){
$is_abc = $is_numer = 0;
$password = $tmp ='';
switch($format){
case 'ALL':
$chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
case 'CHAR':
$chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
case 'NUMBER':
$chars='';
$chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
} // www.jb51.net
mt_srand((double)microtime()*1000000*getmypid());
while(strlen($password)&$len){
$tmp =substr($chars,(mt_rand()%strlen($chars)),1);
if(($is_numer && 1 && is_numeric($tmp) && $tmp &0 )|| $format == 'CHAR'){
$is_numer = 1;
if(($is_abc && 1 && preg_match('/[a-zA-Z]/',$tmp)) || $format == 'NUMBER'){
$is_abc = 1;
$password.= $
if($is_numer && 1 || $is_abc && 1 || empty($password) ){
$password = $this-&random_number($len,$format);
支付结果通知 notify.php(这里的地址就是统一下单时填写的回调地址,微信已经封装好),文档下载地址
https://mch.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1
其实这个页面最主要的代码就两行
[php] view plain copy
$notify = new PayNotifyCallBack();
$notify-&Handle(false);
其中大部分逻辑在 Handle 函数中处理 文件 WxPay.Notify.php
[php] view plain copy
final public function Handle($needSign = true)
$msg = &OK&;
//当返回false的时候,表示notify中调用NotifyCallBack回调失败获取签名校验失败,此时直接回复失败
$result = WxpayApi::notify(array($this, 'NotifyCallBack'), $msg);
if($result == false){
$this-&SetReturn_code(&FAIL&);
$this-&SetReturn_msg($msg);
$this-&ReplyNotify(false);
//该分支在成功回调到NotifyCallBack方法,处理完成之后流程
$this-&SetReturn_code(&SUCCESS&);
$this-&SetReturn_msg(&OK&);
$this-&ReplyNotify($needSign);
主要代码:
[php] view plain copy
$result = WxpayApi::notify(array($this, 'NotifyCallBack'), $msg);
跟踪函数 notify 文件WxPay.Api.php
[php] view plain copy
public static function notify($callback, &$msg)
//获取通知的数据
$xml = $GLOBALS['HTTP_RAW_POST_DATA'];
//如果返回成功则验证签名
$result = WxPayResults::Init($xml);
} catch (WxPayException $e){
$msg = $e-&errorMessage();
return call_user_func($callback, $result);
通过 $GLOBALS[&HTTP_RAW_POST_DATA&]; 获取同志数据 然后 Init 函数验证签名等。验签成功运行代码.
这里需要说明一下,php7本身不支持$GLOBALS[&HTTP_RAW_POST_DATA&],需要下载一个插件,具体什么可自行百度,我想说的是可以用file_get_contents(&php://input&),具体原因可参照下面的博客,写的很详细(https://my.oschina.net/jiec/blog/485359)
[php] view plain copy
return call_user_func($callback, $result);
即调用了一个回调函数,NotifyCallBack() 函数并传递参数 $result 在NotifyCallBack函数中会调用我们重写的NotifyProcess()函数(此函数在notify.php 中被重写)
NotifyProcess() 判断也没有问题就会 设置返回 success的xml信息
[php] view plain copy
$this-&SetReturn_code(&SUCCESS&);
$this-&SetReturn_msg(&OK&);
并最终调用函数 this&&ReplyNotify(needSign); echo success的结果
函数ReplyNotify 需要修改一处代码:
[php] view plain copy
final private function ReplyNotify($needSign = true)
//如果需要签名
if($needSign == true &&
$this-&GetReturn_code($return_code) == &SUCCESS&)
$this-&SetSign();
WxpayApi::replyNotify($this-&ToXml());
[php] view plain copy
$this-&GetReturn_code($return_code) == &SUCCESS&)
[php] view plain copy
$this-&GetReturn_code() == &SUCCESS&)
然后是根据返回信息修改订单状态,主要就是,在什么地方修改,我是在notify.php里面新建了一个方法
//修改订单状态
public function updateState($data){
if($data){
$order_sn = $data['out_trade_no'];\
$data = array();
$data['order_id'] = $order_
//修改订单状态(用curlpost方法请求至thinkphp目录下的Controller里面控制器里面的方法,修改状态)
$url = 'www.test.com';
header('content-type:text/charset=utf8');
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
$result = curl_exec($curl);
curl_close($curl);
if($result == 'success'){
然后在notify.php 的
$notify = new PayNotifyCallBack();
$notify-&Handle(false);
//接受参数,修改状态
$xml = file_get_contents(&php://input&);
$data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
$notify-&updateState($data);浅谈使用 PHP 进行手机 APP 开发(API 接口开发)_php实例
作者:用户
本文讲的是浅谈使用 PHP 进行手机 APP 开发(API 接口开发)_php实例,
一、先简单回答两个问题:
1、PHP 可以开发客户端?
答:可以,因为PHP是脚本语言,是负责完成 B/S架构 或 C/S架构 的S部分,即:主要用于服务端的开发。但是,PHP可不仅仅只能在互联网站上发展,一个PHP for Androi
一、先简单回答两个问题:
1、 可以客户端?
答:可以,因为PHP是脚本语言,是负责完成 B/S架构 或 C/S架构 的S部分,即:主要用于服务端的开发。但是,PHP可不仅仅只能在互联网站上发展,一个PHP for Android(PFA)站点表示他们将可以发布编程模型、工具盒让PHP在Android上实现应用。该项目的主要赞助商是开源公司IronTec,PFA使用Scripting Layer for Android (SL4A),也就是Androd Scripting Environment(ASE)来实现这一点,您可以参看他们的网站来了解更多技术内幕。
如果有兴趣你可以参考一些相关的技术文档,比如:http://so.jb51.net/cse/search?q=php+for+android&s=
2、为什么选择 PHP 作为开发服务端的首选?
答:跨平台(可以运行在UNIX、LINUX、WINDOWS、Mac OS下)、低消耗(PHP消耗相当少的系统资源)、运行效率高(相对而言)、MySQL的完美搭档,本身是免费开源的,......
二、如何使用 PHP 开发 API(Application Programming Interface,应用程序编程接口) 呢?
做过 API 的人应该了解,其实开发 API 比开发 WEB 更简洁,但可能逻辑更复杂,因为 API 其实就是数据输出,不用呈现页面,所以也就不存在 MVC(API 只有 M 和 C),
1、和 WEB 开发一样,首先需要一些相关的参数,这些参数,都会由客户端传过来,也许是 GET 也许是 POST,这个需要开发团队相互之间约定好,或者制定统一规范。
2、有了参数,根据应用需求,完成数据处理,例如:任务进度更新、APP内购、一局游戏结束数据提交等等
3、数据逻辑处理完之后,返回客户端所需要用到的相关数据,例如:任务状态、内购结果、玩家信息等等
数据怎么返给客户端?
直接输出的形式,如:JSON、XML、TEXT 等等。
4、客户端获取到你返回的数据后,在客户端本地和用户进行交互
临时写的一个简单 API 例子:
$output = array();
$a = @$_GET['a'] ? $_GET['a'] : '';
$uid = @$_GET['uid'] ? $_GET['uid'] : 0;
if (empty($a)) {
$output = array('data'=&NULL, 'info'=&'坑爹啊!', 'code'=&-201);
exit(json_encode($output));
if ($a == 'get_users') {
//检查用户
if ($uid == 0) {
$output = array('data'=&NULL, 'info'=&'The uid is null!', 'code'=&-401);
exit(json_encode($output));
//假设 $ 是数据库
$mysql = array(
10001 =& array(
'uid'=&10001,
'nickname' =& 'Shine X',
'email'=&'',
'qq'=&979137,
'gold'=&1500,
'powerplay'=& array('2xp'=&12,'gem'=&12,'bingo'=&5,'keys'=&5,'chest'=&8),
'gems'=& array('red'=&13,'green'=&3,'blue'=&8,'yellow'=&17),
'ctime'=&,
'lastLogin'=&,
'level'=&19,
'exp'=&16758,
10002 =& array(
'uid'=&10002,
'vip'=&50,
'nickname' =& 'elva',
'email'=&'',
'qq'=&NULL,
'gold'=&14320,
'powerplay'=& array('2xp'=&1,'gem'=&120,'bingo'=&51,'keys'=&5,'chest'=&8),
'gems'=& array('red'=&13,'green'=&3,'blue'=&8,'yellow'=&17),
'ctime'=&,
'lastLogin'=&,
'level'=&112,
'exp'=&167588,
10003 =& array(
'uid' =& 10003,
'vip' =& 5,
'nickname' =& 'Lily',
'email' =& '',
'qq' =& NULL,
'gold' =& 1541,
'powerplay'=& array('2xp'=&2,'gem'=&112,'bingo'=&4,'keys'=&7,'chest'=&8),
'gems' =& array('red'=&13,'green'=&3,'blue'=&9,'yellow'=&7),
'ctime' =& ,
'lastLogin'=& ,
'level' =& 10,
'exp' =& 1758,
$uidArr = array(,10003);
if (in_array($uid, $uidArr, true)) {
$output = array('data' =& NULL, 'info'=&'The user does not exist!', 'code' =& -402);
exit(json_encode($output));
//查询数据库
$userInfo = $mysql[$uid];
//输出数据
$output = array(
'data' =& array(
'userInfo' =& $userInfo,
'isLogin' =& true,//是否首次登陆
'unread' =& 4,//未读消息数量
'untask' =& 3,//未完成任务
'info' =& 'Here is the message which, commonly used in popup window', //消息提示,客户端常会用此作为给弹窗信息。
'code' =& 200, //成功与失败的代码,一般都是正数或者负数
exit(json_encode($output));
} elseif ($a == 'get_games_result') {
die('您正在调 get_games_result 接口!');
} elseif ($a == 'upload_avatars') {
die('您正在调 upload_avatars 接口!');
点击测试(对于客户端而言,也是直接调用这样的地址):
http://www.ezhi.net/api/test/index.php
http://www.ezhi.net/api/test/index.php?a=get_users
http://www.ezhi.net/api/test/index.php?a=get_users&uid=10001
http://www.ezhi.net/api/test/index.php?a=get_users&uid=10002
http://www.ezhi.net/api/test/index.php?a=get_users&uid=10003
三、实际项目中,我们在开发 API 应该注意的几个事项(仅供参考):
1、单文件实现多接口的形式有很多种,例如:if..elseif.. 或 switch 或 动态方法 (也就是TP的这种访问函数体的形式)
2、对于数据的输出最好用json,json具有相当强大的跨平台性,市场上各大主流编程语言都支持json解析,json正在逐步取代xml,成为网络数据的通用格式
3、接口安全,一定要增加接口验证。例如,客户端和服务端针对不同接口统一做好加密方式,服务端在对于每次接口需要都要进行验证。以保证防止接口被恶意刷新或黑客恶意调用,尤其是大型商业应用。
4、对于线上的 API 必须保证所有接口正常且关闭所有的错误信息 =& error_reporting(0),在输出JSON 时,不能有任何其它输出,否则,客户端将会获取错误的数据信息,98%直接导致客户端 Crash!
5、开发 API 和 WEB 有一定的区别,如果是 WEB 的话,可能代码出错了,不会导致特别严重的错误,也许只是导致数据写入和查询失败,也许导致 WEB 的某个部分错位或乱码。但如果是 API,99%的情况都是客户端直接Crash、闪退!
6、做接口开发,不建议使用框架开发,原因概括起来有两点(其实我有点冒风险的,本人也是 TPer 一枚,毕竟这是TP的官网):
客户端一般对服务端的响应速度有极高要求,因此,使用最原生态的 PHP完成接口开发,是最高效的,假如用到了框架,还需要加载各种不需要多余的文件,就好比夏天穿了件冬天的衣服。试想,你在玩手机的时候,使用一个应用随便一个操作,等半天才有动静,你受的了吗?
就是上面第4点提到的,框架对于WEB开发,是件很幸福的事,但对于 API 而言,你实在不敢想象它会给你出什么岔子!最后你将痛苦不堪~~因为很多框架都是为 WEB 诞生的(我也很期待有一天能看到专门为开发 API 而生的框架或者扩展)
说到这,不得不说扯一下,风靡互联网的开放平台。其实那些开放平台,所谓的开放,就是给你提供一个这样的接口,你根据他们提供的技术文档,按他们制定的格式和要求,调它们提供的接口文件(一般都是返回JSON或者XML),你就可以获取到他们的相关信息,例如:QQ用户基本信息、淘宝店铺、商品消息等等。然后在根据这些消息,在你的应用里完成交互。
其实,ajax 也是调用 API 的一种体现形式,你觉得呢? 呵呵~~
以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索php
php api接口开发实例、yii2 api接口开发实例、java开发api接口实例、web api接口开发实例、.net api接口开发实例,以便于您获取更多的相关知识。
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率
40+云计算产品,6个月免费体验
稳定可靠、可弹性伸缩的在线数据库服务,全球最受欢迎的开源数据库之一
云服务器9.9元/月,大学必备
云栖社区(yq.aliyun.com)为您免费提供相关信息,包括
,所有相关内容均不代表云栖社区的意见!&nbsp>&nbsp
&nbsp>&nbsp
&nbsp>&nbsp
PHP-- app接口的demo 与 详解
摘要:1app接口首先是跨域请求如果用ajax请求接口2php端进行处理数据然后返还给app3jsonpCallback里面的值我们可以理解为一个token如果后台没有把这个值回调给app,那么这次请求是不成功的,因此,面对一些安全问题的时候,我们可以利用这个机制,采用加盐碰撞,或者Android和IOS与后台程序员进行规则的设定,进行安全性的考虑与开发!4总结:这是一个app接口开发的思路,还有很多别的办法,大家可以互相讨论
1 app接口首先是跨域请求 如果用ajax请求接口
2 php端进行处理数据 然后返还给app
3 jsonpCallback 里面的值 我们可以理解为一个token 如果后台没有把这个值回调给app,那么这次请求是不成功的,因此,面对一些安全问题的时候,我们可以利用这个机制,采用加盐碰撞,或者Android和IOS与后台程序员进行规则的设定,进行安全性的考虑与开发!
4 总结: 这是一个app接口开发的思路,还有很多别的办法,大家可以互相讨论
以上是的内容,更多
的内容,请您使用右上方搜索功能获取相关信息。
若你要投稿、删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内给你回复。
云服务器 ECS
可弹性伸缩、安全稳定、简单易用
&40.8元/月起
预测未发生的攻击
&24元/月起
邮箱低至5折
推荐购买再奖现金,最高25%
&200元/3月起
你可能还喜欢
你可能感兴趣
阿里云教程中心为您免费提供
PHP-- app接口的demo 与 详解相关信息,包括
的信息,所有PHP-- app接口的demo 与 详解相关内容均不代表阿里云的意见!投稿删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内答复
售前咨询热线
支持与服务
资源和社区
关注阿里云
International请问安卓如何调用php后台接口
[问题点数:100分,结帖人qq_]
请问安卓如何调用php后台接口
[问题点数:100分,结帖人qq_]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2016年1月 Java大版内专家分月排行榜第二2015年12月 Java大版内专家分月排行榜第二2015年8月 Java大版内专家分月排行榜第二2015年3月 Java大版内专家分月排行榜第二2015年1月 Java大版内专家分月排行榜第二2014年12月 Java大版内专家分月排行榜第二2014年11月 Java大版内专家分月排行榜第二2014年6月 Java大版内专家分月排行榜第二2014年4月 Java大版内专家分月排行榜第二2014年1月 Java大版内专家分月排行榜第二2013年11月 Java大版内专家分月排行榜第二
2015年9月 Java大版内专家分月排行榜第三2015年6月 Java大版内专家分月排行榜第三2015年5月 Java大版内专家分月排行榜第三2015年2月 Java大版内专家分月排行榜第三2014年3月 Java大版内专家分月排行榜第三2013年12月 Java大版内专家分月排行榜第三
匿名用户不能发表回复!|利用PHP如何写APP接口详解
转载 &更新时间:日 11:27:00 & 投稿:daisy
很多朋友在开发时遇到过这样的问题:后台什么时候提供接口?怎么才提供一个接口,其他接口什么时候给出来?没有接口我们前端怎么能做得了?那学完本篇就可以自己搞个接口来返回固定的死数据来测试了!
搭建PHP环境
由于本人使用的电脑是Mac,因此推荐大家使用MAMP PRO这款软件,不过是收费版,相信不想花钱的大家会有办法搞定的!
MAMP PRO这款软件是集成环境软件,已经有apache、mysql、php了,具备运行解析PHP的环境了!
如果不想使用集成环境,可以自己搭建。Mac自带了apache和PHP环境的,只需要稍加配置一下就可以使用了,然后再安装一下mysql就可以了!
大家可以看一下简单版本配置:Mac配置PHP环境 这篇文章。
启动服务器
这里是以MAMP PRO软件为例,如何启动服务器。如下图,我们假设服务地址为 www.api.com ,然后将项目目录与这个服务地址关联起来,看图中右下角圈圈部分:
环境启动后,就可以在浏览器中直接输入 www.api.com 运行起来了!
开始GET接口
我们的空项目在首次运行后,会自动生成 index.php 这个文件,我们删除里面的内容,然后修改如下:
$data = array(
'tid' =& 100,
'name' =& '标哥的技术博客',
'site' =& 'www.huangyibiao.com');
$response = array(
'code' =& 200,
'message' =& 'success for request',
'data' =& $data,
echojson_encode($response);
我们这里的结构是日常App开发中最常见的返回数据结构了吧?通常都是状态码、状态信息和客户端业务数据。
PHP其实也好给力,声明数组后,通过 json_encode 函数就可以输出json格式数据了!
iOS调GET接口
我们有了服务器,也写了接口了,那么客户端如何请求又如何获取数据呢?我们先来看一下最简单的GET请求例子,其中使用了HYBNetworking笔者的这个开源库:
NSString *url = @"http://www.api.com/index.php";
[HYBNetworkinggetWithUrl:urlrefreshCache:YESsuccess:^(id response) {
}fail:^(NSError *error) {
我们看一下iOS客户端的响应结果:
从响应结果可以看到,与我们服务器接口所返回的是一致的,看下图在浏览器中访问的效果:
PHP POST接口
假设我们要求传参数type过来,而且要求是数值型,用于返回不同的数据,当我们做接口测试时,就可以通过这么来干,就不需要等后台给接口了!
$type = $_POST['type'];
$data = '';
if (isset($type) && is_numeric($type) && $type &= 0) {
if ($type == 1) {
$data = array(
'type' =& $type,
'name' =& '标哥的技术博客',
'site' =& 'www.huangyibiao.com');
} else if ($type == 2) {
$data = array(
'type' =& $type,
'name' =& '公众号:标哥的技术博客',
'site' =& 'weixin search: biaogedejishuboke');
$response = array(
'code' =& 200,
'message' =& 'success for request',
'data' =& $data,
echojson_encode($response);
$response = array(
'code' =& 999,
'message' =& 'argument error for request',
'data' =& $data,
echojson_encode($response);
iOS调POST接口
下面是iOS客户端如何调用刚才所写的PHP POST接口,其中使用了HYBNetworking笔者的这个开源库:
NSString *url = @"http://www.api.com/index.php";
NSDictionary *params = @{@"type" : @(1)};
[HYBNetworkingpostWithUrl:urlrefreshCache:YESparams:paramssuccess:^(id response) {
}fail:^(NSError *error) {
我们看看效果如下,可看到如愿地接收到了服务器返回的接口数据并解析出来了:
本篇文章的内容到这就基本结束了,相信大家若想学习它,一定会认真去操作一遍的!今后会慢慢接触它,慢慢掌握它,一定会让你在工作上更加顺利的!希望本文对大家能有所帮助。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具}

我要回帖

更多关于 数据库调用web接口 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信