首页 > 编程知识 正文

php微信刷卡支付mvc,PHP微信支付

时间:2023-12-29 20:31:59 阅读:331052 作者:QUMN

本文目录一览:

你好 !! PHP如何实现微信支付 求指教 新手!说清楚一点

通知机制的实现,官方只有文档没有demo代码,对没搞过的人来说,需要花大量时间来做测试。

从文档上说的来看,微信每次通知过来的数据,结构比较复杂,是一个多段数据,除了要取出POST数据外,还要取其它的数据。

这里首先涉及到一个关于php://input与$_POST取值的问题,简单列几点如下:

1,Content- Type取值为application/x-www-form-urlencoded时,php会将http请求body相应数据会填入到数组$_POST,填入到$_POST数组中的数据是进行urldecode()解析的结果。(其实,除了该Content-Type,还有 multipart/form-data表示数据是表单数据,稍后我们介绍)

2,php://input数据,只要Content-Type不为 multipart/form-data(该条件限制稍后会介绍)。那么php://input数据与http entity body部分数据是一致的。该部分相一致的数据的长度由Content-Length指定。

3,仅当Content-Type为application/x-www-form-urlencoded且提交方法是POST方法时,$_POST数据与php://input数据才是”一致”(打上引号,表示它们格式不一致,内容一致)的。其它情况,它们都不一致。

4,php://input读取不到$_GET数据。是因为$_GET数据作为query_path写在http请求头部(header)的PATH字段,而不是写在http请求的body部分。

帮助我们了解了为什么xml_rpc服务端读取数据都是通过file_get_contents(‘php://input', ‘r')。

而不是从$_POST中读取,正是因为xml_rpc数据规格是xml,它的Content-Type是text/xml。

5. php://input碰到了multipart/form-data,请查阅RFC1867对它的描述。multipart/form-data也表示以POST方法提交表单数据,它还伴随了文件上传,所以会跟application/x- www-form-urlencoded数据格式不一样。它会以一更种更合理的,更高效的数据格式传递给服务端。当Content-Type为multipart/form-data的时候,即便http请求body中存在数据,php://input也为空,PHP此时,不会把数据填入php://input流。所以,可以确定: php://input不能用于读取enctype=multipart/form-data数据。

6. 当Content-Type为application/x- www-form-urlencoded时,php://input和$_POST数据是“一致”的,为其它Content-Type的时候,php: //input和$_POST数据数据是不一致的。因为只有在Content-Type为application/x-www-form- urlencoded或者为multipart/form-data的时候,PHP才会将http请求数据包中的body相应部分数据填入$_POST全局变量中,其它情况PHP都忽略。而php://input除了在数据类型为multipart/form-data之外为空外,其它情况都可能不为空

以上转述这么多文字的意思,就是说,得用到这两种方式来读取微信传过来的数据。 ..

php为什么支付成功了返回fail

php支付成功了返回fail是因为后台处理成功了,但是页面报错导致提示错误。

?php

$service = isset( $_GET [ 'service' ]) ? $_GET [ 'service' ] : 'create_direct_pay_by_user' ;

$services = array( //交易类型

'create_direct_pay_by_user' = '即时到账' ,

'create_partner_trade_by_buyer' = '担保交易' ,

);

if(! array_key_exists ( $service , $services )) exit( '错误的交易类型' );

?

p style="border:2px dotted blue;width:auto;"

label请选择交易类型:/label

?php foreach ( $services as $key = $val ): ?

?php if( $service == $key ): ?

b style="color:red"?php echo $val ; ? /b

?php else: ?

ba href="?php echo url (array( 'service' = $key )); ? "?php echo $val ; ? /a/b

?php endif; ?

?php endforeach; ?

/p

?php

//php支付宝支付接口参数 主要如下

//(合作商户编号,加密串,返回url, 默认编码,商品名称,商品简介,商户订单号,物流配送费用)

function getRequestUrl ( $partner , $scode , $return_url , $charset , $subject , $body , $order , $lfee ) {

global $data , $service ;

# 支付宝交易类型

$data [ 'service' ] = $service ; //create_partner_trade_by_buyer[担保交易]create_direct_pay_by_user[即时到账]

# 合作商户编号

$data [ 'partner' ] = $partner ;

# 请求返回地址

$data [ 'return_url' ] = $return_url ;

# 默认编码

$data [ '_input_charset' ] = $charset ;

# 默认支付渠道

$data [ 'paymenthod' ] = 'bankPay' ;

# 默认的网银

$data [ 'defaultbank' ] = 'ICBCB2C' ;

# 商品名称

$data [ 'subject' ] = $subject ;

# 商品展示URL

$data [ 'show_url' ] = ’‘ ;

# 异步通知返回

$data [ 'notify_url' ] = ’‘ ;

# 商品简介

$data [ 'body' ] = $body ;

# 商户订单号

$data [ 'out_trade_no' ] = $order ;

# 物流配送费用

$data [ 'logistics_fee' ] = $lfee ;

# 物流费用付款方式

$data [ 'logistics_payment' ] = 'SELLER_PAY' ; //SELLER_PAY(卖家支付)、BUYER_PAY(买家支付)、BUYER_PAY_AFTER_RECEIVE(货到付款)

# 物流配送方式

$data [ 'logistics_type' ] = 'POST' ; //物流配送方式:POST(平邮)、EMS(EMS)、EXPRESS(其他快递)

# 价格

$data [ 'price' ] = '10.00' ;

#$data['total_fee'] = '10.00';

# 付款方式

$data [ 'payment_type' ] = '1' ;

# 商品数量

$data [ 'quantity' ] = '1' ;

# 卖家email

$data [ 'seller_email' ] = 'chen@sjolzy.cn' ;

$data = array_filter ( $data );

ksort ( $data ); reset ( $data );

$data [ 'sign' ] = md5 ( urldecode ( http_build_query ( $data )). $scode );

$data [ 'sign_type' ] = 'MD5' ;

$url = '?' . http_build_query ( $data );

return $url ;

}

//把支付宝接口的参数 带入进去测试

$url = getRequestUrl ( '2010101908738750' , 'ma0werwert6s2bsd1frg7hisaiaz5xjr' , '' , 'UTF-8' , '测试商品' , '测试内容' , uniqid (), '0.00' );

如何用PHP实现微信支付,求教。新手!说明详细点

以PHP语言为例,对微信支付的开发流程进行一下说明:

1.获取订单信息。

2.根据订单信息和支付相关的账号生成sign,并且生成支付参数。

3.将支付参数信息POST到微信服务器,获取返回信息。

4.根据返回信息生成相应的支付代码(微信内部)或是支付二维码(非微信内),完成支付。

微信支付开发:发起一个支付点击支付提示 get_brand_wcpay_request:fail_invalid appid错误

说一下我的解决办法,供大家参考。这个问题的原因还是在微信支付-开发配置的授权目录设定上,我使用的官方php demo(普通公众号微信支付),微信支付的调用脚本getBrandWCPayRequest所在的页面需要是普通的php项目结构,如果是mvc就会报出上面的invalid appid错误。所以,我把微信支付的js调用页面单独拿出作为一个新的项目就ok了。为了避免mvc到普通php项目结构转移的麻烦,只需要把getBrandWCPayRequest 的js代码块拿到新项目中即可,至于js中使用的动态参数,可以在mvc中整理好以参数的形式传递到新项目的微信支付调用页面即可,支付成功后的异步通知页面也仍可以写在mvc项目中。目前该办法解决了我的微信支付问题,如果有网友解决了mvc的授权问题,可以补充一下。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。

  •  标签:  
  • php   mvc