php微信支付App服务端接口程序代码

一:获取根据客户端传入数据 远程获取prepay_id

public function WxpayPost(){
 
// $data='{"login_id":"479090","nick_name":"150****1068","body":"weixin","source":"android","total_fee":"1","versionNum":"2.58"}';
// $data=json_decode($data,true);
$this->values['appid'] = APPID;
 
$this->values['body'] = trim($data['body']);
 
$this->values['mch_id']= MCHID;//商户号
 
$this->values['nonce_str'] = self::getNonceStr();
 
$this->values['notify_url'] = 'http://'.$_SERVER['HTTP_HOST'].'/App/WxPay/Nofity';
 
//$this->values['openid'] = $openid;
$this->values['out_trade_no'] = MCHID.date("YmdHis");
 
$this->values['spbill_create_ip']=$_SERVER['REMOTE_ADDR'];//终端ip
 
$this->values['total_fee'] = $data['total_fee'];
 
$this->values['trade_type'] = "APP";
//$this->values['sign'] = $data['sign'];
$order= $this->unifiedOrder( $this->values);
 
if($order){
 
//$order['xml']['prepay_id'];
 
}
 
}
 
 
 
public static function unifiedOrder($inputObj, $timeOut = 6)
{
$url = "https://api.mch.weixin.qq.com/pay/unifiedorder";
//检测必填参数
if(!WxPayService::IsOut_trade_noSet($inputObj)) {
throw_exception("缺少统一支付接口必填参数out_trade_no!");
}else if(!WxPayService::IsBodySet($inputObj)){
throw_exception("缺少统一支付接口必填参数body!");
}else if(!WxPayService::IsTotal_feeSet($inputObj)) {
throw_exception("缺少统一支付接口必填参数total_fee!");
}else if(!WxPayService::IsTrade_typeSet($inputObj)) {
throw_exception("缺少统一支付接口必填参数trade_type!");
}
 
//关联参数
if(WxPayService::GetTrade_type($inputObj) == "JSAPI" && !WxPayService::IsOpenidSet($inputObj)){
throw_exception("统一支付接口中,缺少必填参数openid!trade_type为JSAPI时,openid为必填参数!");
}
if(WxPayService::GetTrade_type($inputObj) == "NATIVE" && !WxPayService::IsProduct_idSet($inputObj)){
throw_exception("统一支付接口中,缺少必填参数product_id!trade_type为JSAPI时,product_id为必填参数!");
}
 
//异步通知url未设置,则使用配置文件中的url
if(!WxPayService::IsNotify_urlSet($inputObj)){
WxPayService::SetNotify_url(NOTIFY_URL);//异步通知url
}
 
// $inputObj['appid']= APPID ;//公众账号ID
 
// $inputObj['spbill_create_ip']= $_SERVER['REMOTE_ADDR'];//终端ip
//$inputObj->SetSpbill_create_ip("1.1.1.1");
//$inputObj['nonce_str']=self::getNonceStr();//随机字符串
//签名
$inputObj['sign']= WxPayService::SetSign($inputObj);
$xml = WxPayService::ToXml($inputObj);
 
$response = self::postXmlCurl($xml, $url, false, $timeOut);
$result = WxPayService::Init($response,$inputObj);
 
$results=array("sign"=>$inputObj['sign'],"xml"=>$result);
return $results;
}
 
 
 
/**
* 以post方式提交xml到对应的接口url
* Enter description here ...
* @param string $xml 需要post的xml数据
* @param string $url url
* @param bool $useCert 是否需要证书,默认不需要
* @param int $second url执行超时时间,默认30s
* @throws WxPayException
*/
private static function postXmlCurl($xml, $url, $useCert = false, $second = 30)
{
//初始化curl
$ch = curl_init();
//设置超时
curl_setopt($ch, CURLOPT_TIMEOUT, $second);
 
//如果有配置代理这里就设置代理
// if(self::CURL_PROXY_HOST != "0.0.0.0"
// && self::CURL_PROXY_PORT != 0){
// curl_setopt($ch,CURLOPT_PROXY, self::CURL_PROXY_HOST);
// curl_setopt($ch,CURLOPT_PROXYPORT, self::CURL_PROXY_PORT);
// }
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
//设置header
curl_setopt($ch, CURLOPT_HEADER, FALSE);
//要求结果为字符串且输出到屏幕上
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
// if($useCert == true){
// //设置证书
// //使用证书:cert 与 key 分别属于两个.pem文件
// curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
// curl_setopt($ch,CURLOPT_SSLCERT, self::SSLCERT_PATH);
// curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');
// curl_setopt($ch,CURLOPT_SSLKEY, self::SSLKEY_PATH);
// }
//post提交方式
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
//运行curl
$data = curl_exec($ch);
//返回结果
if($data){
curl_close($ch);
return $data;
} else {
$error = curl_errno($ch);
curl_close($ch);
throw_exception("curl出错,错误码:$error");
}
}

二:异步通知处理

public function Nofity(){
 
$postStr= $GLOBALS['HTTP_RAW_POST_DATA'];
 
$fp = @fopen( './notify.txt', 'w+');
@fwrite($fp, $postStr . "|||" . time() );
 
$xml=$this->verifyNotify($postStr);
//print_r($xml);
if($xml['return_code']=='SUCCESS'){
$orderxml=$this->orderQuery($postStr);
$orders=$this->getXmlArray($orderxml);
 
$user_order=M("dtb_user_order","","");
if($orders['result_code']=="SUCCESS"){
 
$time=date("Y-m-d H:i:s",time());
 
$user_order->execute("update dtb_user_order set `pay_status`=1 , pay_time='{$time}' where order_sn='{$orders['out_trade_no']}'");
}else{
$user_order->execute("update dtb_user_order set `pay_status`=0 where order_sn={$orders['out_trade_no']}");
}
}
 
}
 
 
 
public function orderQuery($data){
$xml = $this->getXmlArray($data);
$order['appid']=APPID;
$order['mch_id']=MCHID;
$order['nonce_str']=$xml['nonce_str'];
$order['transaction_id']=$xml['transaction_id'];
$order['sign']= WxPayService::SetSign($order);
$xml = WxPayService::ToXml($order);
 
$url="https://api.mch.weixin.qq.com/pay/orderquery";
$timeOut = 6;
$response = self::postXmlCurl($xml, $url, false, $timeOut);
return $response;
// print_r($response);
}

时间: 2024-09-27 23:35:16

php微信支付App服务端接口程序代码的相关文章

android微信支付的服务端该怎么写,官网demo看半天都看不明白,有没有手把手教程,要服务端的

问题描述 android微信支付的服务端该怎么写,官网demo看半天都看不明白,有没有手把手教程,要服务端的 android微信支付的服务端该怎么写,官网demo看半天都看不明白,有没有手把手教程,要服务端的 解决方案 微信开发者文档里面写了恩 解决方案二: 我之前微信支付服务端是用demo中的asp写的如果有需要,可以联系我QQ360206731 解决方案三: --同样困惑中,找资料了看不太懂哪

android服务端接口问题

问题描述 android服务端接口问题 android手机端需要传给服务端很多字段,实现保存需求.服务端怎么设计接口形式,用get还是post请求来设计 解决方案 这个你得和服务器端商量,看他们需要get还是post?是使用HTTP请求,还是httpclient?是传什么字段,格式是什么样的?其实这些在公司都是有接口文档的,只要你看文档就都知道了. 解决方案二: 传数据上的话 post put 好像都可以 解决方案三: 看服务器端的接口 需要你传什么url 什么信息 解决方案四: 一般都是pos

php版的微信公众号接口发红包程序代码

最近接到一个任务,需要用微信来给用户自动发红包.要完成这个任务需要这么已经一些物料 微信商户号,已申请微信支付 微信商户号主体下面的微信公仔号 先看一下效果图 只需要完成后面几步就可以了. 在微信支付的服务器上面部署红包代码 在微信公众号服务器上面调用红包代码 /* **微信红包功能 */   public function sendredpack(){     $re_openid = $this->_pg('re_openid');    $inputObj = new sendredpac

java实现微信支付(服务端)_java

废话不多说,直接看代码. RequestHandler requestHandler = new RequestHandler(super.getRequest(),super.getResponse()); //获取token //两小时内有效,两小时后重新获取 Token = requestHandler.GetToken(); //更新token 到应用中 requestHandler.getTokenReal(); System.out.println("微信支付获取token=====

可以客户端调用服务端接口 服务器再 REST 去促发hu发消息.....

问题描述 发消息这块 我想这样做客户端调用自己服务器接口 服务器调用环信发消息接口请问这样做可以吗?靠谱吗?然后就是 我看1分钟30次限制如果我这样做是否也有这个限制?如果有的话肯定做不成了 解决方案 可以,但同一ip地址调用rest接口,每秒30次,只要每秒不超过30次就没限制解决方案二:> forum.php?mod=redirect&goto=findpost&pid=1457&ptid=729可以,但同一ip地址调用rest接口,每秒30次,只要每秒不超过30次就没限

微信小程序-详解微信登陆、微信支付、模板消息_javascript技巧

微信公众平台近日悄然开始内测微信小程序(微信公众号)功能,引来无数开发者和普通用户关注,微信支付的能力,是随着小程序的发布一并推出的,具有介绍如下: wx.login(OBJECT) 调用接口获取登录凭证(code)进而换取用户登录态信息,包括用户的唯一标识(openid) 及本次登录的 会话密钥(session_key).用户数据的加解密通讯需要依赖会话密钥完成. OBJECT参数说明: success返回参数说明: 示例代码: //app.js App({ onLaunch: functio

新版微信小程序即将上线 新增微信支付功能

<经济参考报>消息,新版微信小程序正在测试中,有可能将在近期正式上线.新版小程序增加了"附近门店"功能的接口,微信用户可以通过定位功能,查看提供线下服务的各类门店,并直接利用小程序实现包括预约.支付在内的多种服务. 让外界意外的是,小程序上线后不久关注度骤然下降.不少开发者也反映,用户对微信小程序的使用频率无法和原有的各类手机应用媲美.对此,微信官方一方面称,小程序并非手机应用的替代品,另一方面又表示,将对小程序不断迭代升级,并帮助开发者,共同为用户提供更加便捷的服务. 经

微信支付开发IOS图文教程案例_IOS

前言:下面介绍微信支付的开发流程的细节,图文并茂,你可以按照我的随笔流程过一遍代码.包你也学会了微信支付.而且支付也是面试常问的内容. 正文: 1.首先在开始使用微信支付之前,有一些东西是开发者必须要知道的,打开下面链接: https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=3_1 然后可以看到下面的页面,这个就是微信支付商户平台的开发文档,很多东西是可以查阅和了解的,在开发使用微信SDK支付功能的时候,遇到了问题也可以到这找找相关须知信

IOS开发--微信支付

前言:下面介绍微信支付的开发流程的细节,图文并茂,你可以按照我的随笔流程过一遍代码.包你也学会了微信支付.而且支付也是面试常问的内容.   正文:   1.首先在开始使用微信支付之前,有一些东西是开发者必须要知道的,打开下面链接: https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=3_1 然后可以看到下面的页面,这个就是微信支付商户平台的开发文档,很多东西是可以查阅和了解的,在开发使用微信SDK支付功能的时候,遇到了问题也可以到这找找相