黑马程序员技术交流社区

标题: 不懂PHP微信支付开发,看这个贴就知道了 [打印本页]

作者: huawei    时间: 2017-1-18 15:57
标题: 不懂PHP微信支付开发,看这个贴就知道了
本帖最后由 huawei 于 2017-3-5 10:28 编辑

《PHP微信接口开发》 在PHP学习路线图是一个热门分享资源。很多人看完该视频后,获益匪浅,但是也发现有一个小小的遗憾,这么好的视频竟然没有讲到微信支付功能。所以应广大自学党的要求,现在特分享PHP微信支付源码给大家以参考!

----------------------------------下面开启干货分享---------------------------------------

1.开发环境
Thinkphp 3.2.3
微信:服务号,已认证
开发域名:http://test.paywechat.com (自定义的域名,外网不可访问,如果不懂怎么设置,就查看这个帖:http://bbs.itheima.com/thread-300392-1-1.html)

2.需要相关文件和权限
微信支付需申请开通
微信公众平台开发者文档:http://mp.weixin.qq.com/wiki/home/index.html
微信支付开发者文档:https://pay.weixin.qq.com/wiki/doc/api/index.html
微信支付SDK下载地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1

3.开发
下载好微信支付PHP版本的SDK,文件目录为下图:


把微信支付SDK的Cert和Lib目录放入Thinkphp,目录为


现在介绍微信支付授权目录问题,首先是微信支付开发配置里面的支付授权目录填写,


然后填写JS接口安全域。


最后设置网页授权

这些设置完,基本完成一半,注意设置的目录和我thinkphp里面的目录。

4.微信支付配置


5、准备下面几个PHP脚本

1)在Wxpay.config.php脚本中,把相关配置填写正确,如下所示:

<?php
/**
* 配置账号信息
*/
class WxPayConfig
{
//=======【基本信息设置】=====================================
//
/**
* TODO: 修改这里配置为您自己申请的商户信息
* 微信公众号信息配置
*
* APPID:绑定支付的APPID(必须配置,开户邮件中可查看)
*
* MCHID:商户号(必须配置,开户邮件中可查看)
*
* KEY:商户支付密钥,参考开户邮件设置(必须配置,登录商户平台自行设置)
* 设置地址:https://pay.weixin.qq.com/index.php/account/api_cert
*
* APPSECRET:公众帐号secert(仅JSAPI支付的时候需要配置, 登录公众平台,进入开发者中心可设置),
* 获取地址:https://mp.weixin.qq.com/advance ... 05451881&lang=zh_CN
* @var string
*/
const APPID = '';
const MCHID = '';
const KEY = '';
const APPSECRET = '';

//=======【证书路径设置】=====================================
/**
* TODO:设置商户证书路径
* 证书路径,注意应该填写绝对路径(仅退款、撤销订单时需要,可登录商户平台下载,
* API证书下载地址:https://pay.weixin.qq.com/index.php/account/api_cert,下载之前需要安装商户操作证书)
* @var path
*/
const SSLCERT_PATH = '../cert/apiclient_cert.pem';
const SSLKEY_PATH = '../cert/apiclient_key.pem';

//=======【curl代理设置】===================================
/**
* TODO:这里设置代理机器,只有需要代理的时候才设置,不需要代理,请设置为0.0.0.0和0
* 本例程通过curl使用HTTP POST方法,此处可修改代理服务器,
* 默认CURL_PROXY_HOST=0.0.0.0和CURL_PROXY_PORT=0,此时不开启代理(如有需要才设置)
* @var unknown_type
*/
const CURL_PROXY_HOST = "0.0.0.0";//"10.152.18.220";
const CURL_PROXY_PORT = 0;//8080;

//=======【上报信息配置】===================================
/**
* TODO:接口调用上报等级,默认紧错误上报(注意:上报超时间为【1s】,上报无论成败【永不抛出异常】,
* 不会影响接口调用流程),开启上报之后,方便微信监控请求调用的质量,建议至少
* 开启错误上报。
* 上报等级,0.关闭上报; 1.仅错误出错上报; 2.全量上报
* @var int
*/
const REPORT_LEVENL = 1;
}
[/hide]

2)敲出微信支付父类控制器代码:



3、敲出微信支付测试控制器代码



4)贴上模板HTML

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>微信支付样例-支付</title>
<script type="text/javascript">
//调用微信JS api 支付
function jsApiCall()
{
WeixinJSBridge.invoke(
'getBrandWCPayRequest',
{$jsApiParameters},
function(res){
WeixinJSBridge.log(res.err_msg);
//取消支付
if(res.err_msg == 'get_brand_wcpay_request:cancel'){
//处理取消支付的事件逻辑
}else if(res.err_msg == "get_brand_wcpay_request:ok"){
/*使用以上方式判断前端返回,微信团队郑重提示:
res.err_msg将在用户支付成功后返回 ok,但并不保证它绝对可靠。
这里可以使用Ajax提交到后台,处理一些日志,如Test控制器里面的ajax_PaySuccess方法。
*/
}
alert(res.err_code+res.err_desc+res.err_msg);
}
);
}

function callpay()
{
if (typeof WeixinJSBridge == "undefined"){
if( document.addEventListener ){
document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
}else if (document.attachEvent){
document.attachEvent('WeixinJSBridgeReady', jsApiCall);
document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
}
}else{
jsApiCall();
}
}
//获取共享地址
function editAddress()
{
WeixinJSBridge.invoke(
'editAddress',
{$editAddress},
function(res){
var value1 = res.proviceFirstStageName;
var value2 = res.addressCitySecondStageName;
var value3 = res.addressCountiesThirdStageName;
var value4 = res.addressDetailInfo;
var tel = res.telNumber;
alert(value1 + value2 + value3 + value4 + ":" + tel);
}
);
}

window.onload = function(){
if (typeof WeixinJSBridge == "undefined"){
if( document.addEventListener ){
document.addEventListener('WeixinJSBridgeReady', editAddress, false);
}else if (document.attachEvent){
document.attachEvent('WeixinJSBridgeReady', editAddress);
document.attachEvent('onWeixinJSBridgeReady', editAddress);
}
}else{
editAddress();
}
};

</script>
</head>
<body>
<br/>
<font color="#9ACD32"><b>该笔订单支付金额为<span style="color:#f00;font-size:50px">1分</span>钱</b></font><br/><br/>
<div align="center">
<button style="width:210px; height:50px; border-radius: 15px;background-color:#FE6714; border:0px #FE6714 solid; cursor: pointer; color:white; font-size:16px;" type="button" >立即支付</button>
</div>
</body>
</html>

5)notify.php文件代码,这里有在官方文件里新添加的一个自定义方法。

[hide]
<?php
require_once ROOT_PATH."Api/lib/WxPay.Api.php";
require_once ROOT_PATH.'Api/lib/WxPay.Notify.php';
require_once ROOT_PATH.'Api/lib/log.php';

//初始化日志
$logHandler= new \CLogFileHandler(ROOT_PATH."/logs/".date('Y-m-d').'.log');
$log = \Log::Init($logHandler, 15);

class PayNotifyCallBack extends WxPayNotify
{
protected $para = array('code'=>0,'data'=>'');
//查询订单
public function Queryorder($transaction_id)
{
$input = new \WxPayOrderQuery();
$input->SetTransaction_id($transaction_id);
$result = \WxPayApi::orderQuery($input);
\Log::DEBUG("query:" . json_encode($result));
if(array_key_exists("return_code", $result)
&& array_key_exists("result_code", $result)
&& $result["return_code"] == "SUCCESS"
&& $result["result_code"] == "SUCCESS")
{
return true;
}
$this->para['code'] = 0;
$this->para['data'] = '';
return false;
}

//重写回调处理函数
public function NotifyProcess($data, &$msg)
{
\Log::DEBUG("call back:" . json_encode($data));
$notfiyOutput = array();

if(!array_key_exists("transaction_id", $data)){
$msg = "输入参数不正确";
$this->para['code'] = 0;
$this->para['data'] = '';
return false;
}
//查询订单,判断订单真实性
if(!$this->Queryorder($data["transaction_id"])){
$msg = "订单查询失败";
$this->para['code'] = 0;
$this->para['data'] = '';
return false;
}

$this->para['code'] = 1;
$this->para['data'] = $data;
return true;
}

/**
* 自定义方法 检测微信端是否回调成功方法
* @return multitype:number string
*/
public function IsSuccess(){
return $this->para;
}
}


到这里基本上完成,可以在微信端打开http://域名/Charge/index.php/Test/index/

精华推荐:

2017最新PHP学习路线图(附完整视频资源)+源码+技巧/经验+求职+前景总结!
连续两班仅6日就业率突破53%,看2016PHP课程升级是否成功!
视频集合:众多老学员呐喊:"为什么我选传智PHP"!


作者: 烟雨清寒时    时间: 2017-1-18 16:48
留着万一用上了呢

作者: 威水哥    时间: 2017-1-18 20:35
不懂PHP微信
作者: haoyang999    时间: 2017-1-18 23:20
经典课程,必须回复
作者: zhy0372    时间: 2017-1-19 09:51
我要看,我要学,我要学会
作者: 陈伟为    时间: 2017-1-19 11:38
你好,谢谢谢谢谢谢谢谢谢谢谢谢哥谢谢谢谢谢谢谢谢谢谢
作者: 陈伟为    时间: 2017-1-19 11:39
你好,谢谢谢谢谢谢谢谢谢谢谢谢哥谢谢谢谢谢谢谢谢谢谢
作者: 陈伟为    时间: 2017-1-19 11:39
你好,谢谢谢谢谢谢谢谢谢谢谢谢哥谢谢谢谢谢谢谢谢谢谢
作者: 陈伟为    时间: 2017-1-19 11:40
你好,谢谢谢谢谢谢谢谢谢谢谢谢哥谢谢谢谢谢谢谢谢谢谢
作者: 陈伟为    时间: 2017-1-19 11:40
你好,谢谢谢谢谢谢谢谢谢谢谢谢哥谢谢谢谢谢谢谢谢谢谢
作者: caonm    时间: 2017-1-20 09:58
感谢分享,呵呵
作者: thinkJUN    时间: 2017-1-22 12:52
感谢分享,感谢分享,感谢分享
作者: 萧沫沫    时间: 2017-1-23 10:03
想看,想学
作者: woxuliang2    时间: 2017-2-1 11:53
微信开发
作者: wx9745    时间: 2017-2-4 10:02
学习中.........
作者: zzkloveq    时间: 2017-2-4 11:47
11111111111111
作者: zhanglinsong    时间: 2017-2-6 10:14
看看看看
作者: 707621521    时间: 2017-2-6 16:00
多积累下,说不定就用到了呢
作者: bluesea    时间: 2017-2-7 09:48
经典课程,必须回复
作者: 113006wo    时间: 2017-2-7 12:48
看看,顺便学习学习
作者: 逗号先生    时间: 2017-2-8 14:37
111111111111111111111
作者: 红叶1985    时间: 2017-2-9 10:15

留着万一用上了呢
作者: 1317181388    时间: 2017-2-12 15:52
感谢楼主分享
作者: fjdaslfjk    时间: 2017-2-16 15:05
PHP解析url并得到url中的参数,这是常用实例,以下进行源码分享。怎么能够把URL参数编程数组?怎么又能将 URL参数变成字符串?希望对PHP自学者有用!  <?php $url = 'http://www.baidu.com/index.php?m=content&c=index&a=lists&catid=6&area=0&author=0&h=0®ion=0&s=1&page=1';  $arr = parse_url($url); var_dump($arr); $arr_query = convertUrlQuery($arr['query']); var_dump($arr_query); var_dump(getUrlQuery($arr_query));  /** * 将字符串参数变为数组 * @param $query * @return array array (size=10)      'm' => string 'content' (length=7)      'c' => string 'index' (length=5)      'a' => string 'lists' (length=5)      'catid' => string '6' (length=1)      'area' => string '0' (length=1)      'author' => string '0' (length=1)      'h' => string '0' (length=1)      'region' => string '0' (length=1)      's' => string '1' (length=1)      'page' => string '1' (length=1) */ function convertUrlQuery($query) {     $queryParts = explode('&', $query);     $params = array();     foreach ($queryParts as $param) {         $item = explode('=', $param);         $params[$item[0]] = $item[1];     }     return $params; }  /** * 将参数变为字符串 * @param $array_query * @return string string 'm=content&c=index&a=lists&catid=6&area=0&author=0&h=0®ion=0&s=1&page=1' (length=73) */ function getUrlQuery($array_query) {     $tmp = array();     foreach($array_query as $k=>$param)     {         $tmp[] = $k.'='.$param;     }     $params = implode('&',$tmp);     return $params; }
作者: yu778377806    时间: 2017-2-16 15:47
6666666666666666
作者: —码农—    时间: 2017-2-16 17:41
回复才能查看
作者: Elsa如初    时间: 2017-2-17 15:59
谢谢分享
作者: qq332984152    时间: 2017-2-17 17:00
666dasdsadsa
作者: 584096830    时间: 2017-2-19 20:16

学习学习                  
作者: aslkami    时间: 2017-2-20 10:36
学习一下
作者: itheima_user    时间: 2017-2-20 17:54
正好需要
作者: 江城老腊肉    时间: 2017-2-21 16:26
帮你们,不能,
作者: 409344247    时间: 2017-2-24 16:03
感谢华为
作者: 小白不怕死    时间: 2017-2-26 19:57
666666666666666666
作者: wm123456    时间: 2017-2-27 10:56
12312312312312312312312312
作者: 语然    时间: 2017-2-27 17:42
可以看下具体代码吗
作者: ´-ωก`    时间: 2017-2-27 19:59
看看代码
作者: ´-ωก`    时间: 2017-2-27 20:00
看看非挖坟挖飞啊飞啊万丰奥威发
作者: ´-ωก`    时间: 2017-2-27 20:00
看看非挖坟挖飞啊飞啊万丰奥威发
作者: ´-ωก`    时间: 2017-2-27 20:02
学学学学下下,看看看下
作者: ´-ωก`    时间: 2017-2-27 20:02
学学学学下下,看看看下
作者: ´-ωก`    时间: 2017-2-27 20:03
学学学学下下,看看看下
作者: ´-ωก`    时间: 2017-2-27 20:03
学学学学下下,看看看下
作者: ´-ωก`    时间: 2017-2-27 20:06
secert,支持下,以后会用到。
作者: ´-ωก`    时间: 2017-2-27 20:08
secert,支持下,以后会用到。
作者: ´-ωก`    时间: 2017-2-27 20:09
secert,支持下,以后会用到。
作者: ´-ωก`    时间: 2017-2-27 20:42
prepay_idprepay_idprepay_idprepay_id
作者: wang1874207723    时间: 2017-2-28 13:05
as da asda asd asd asda
作者: hansuchang    时间: 2017-2-28 22:22
66666666666666666666666666
作者: HQB421    时间: 2017-3-2 10:11
非常感谢黑马!!!!!!
作者: 我很好,    时间: 2017-3-3 09:54
真的是干活  可以看一下吗
作者: 我很好,    时间: 2017-3-3 09:55
真的写的很好 我想看全代码
作者: 我很好,    时间: 2017-3-3 09:56
看一下 一看就是干活 特别好
作者: 我很好,    时间: 2017-3-3 09:59
找到最好的微信支付  非常感谢 啊

作者: 我很好,    时间: 2017-3-3 10:01
看一下微信支付这个额  真的是太好了
作者: Overflow    时间: 2017-3-11 17:58
111111111111111
作者: 孑然,孑然。    时间: 2017-3-15 03:37
22222222222222222
作者: 哭吧程序猿    时间: 2017-3-16 00:18
wwwwwwwwwwwwwwwwwwwwww
作者: wmr1986eep    时间: 2017-3-31 09:06
学习参考
作者: wmr1986eep    时间: 2017-3-31 16:34
参考学习
作者: An_Sir    时间: 2017-4-6 10:10
1111111111111111
作者: An_Sir    时间: 2017-4-6 10:39
666666666666666666666666
作者: 船长VIP    时间: 2017-4-18 16:46
1111111111111111111111111111
作者: 223333    时间: 2017-4-19 14:41
knakn ,aisfjijcdsjkvsdnjvndfjkvhsjkhfbavcsssfa
作者: 乌秀    时间: 2017-4-19 14:58
正好需要写微信支付   
作者: 剑客星辰    时间: 2017-4-30 10:55
33333333333333333333333333333333
作者: worldtongf    时间: 2017-5-20 23:37
不懂PHP微信支付开发,看这个贴就知道了 [修改]
作者: 瞬间回忆    时间: 2017-5-24 17:29
懂PHP微信支付开发,看这个贴就知道了
作者: 艾飛児    时间: 2017-5-31 09:30
啦啦啦啦阿里拉阿拉啦啦啦
作者: 莫笑红尘    时间: 2017-6-19 15:35
借鉴经验
作者: 645847022    时间: 2017-6-20 10:55
不错的网站,值得学习
作者: 小福php    时间: 2017-6-28 20:34
好想学习,都是精品啊
作者: absqiang10    时间: 2017-6-28 22:38
发GV好吧
作者: absqiang10    时间: 2017-6-28 22:41
谢谢楼主发帖
作者: 小丙    时间: 2017-7-6 14:35
对新手太有帮助了
作者: 忧郁之子    时间: 2017-7-13 20:12
来看一下微信支付开发
作者: 1479008172    时间: 2017-7-14 20:05
6666666666666666666666666666666
作者: woshiphper    时间: 2017-7-24 13:01
想好好学习学习
作者: wtx    时间: 2017-7-25 21:44
谢谢分享
作者: g742999706    时间: 2017-7-26 10:06
感谢楼主分享
作者: shifu203    时间: 2017-7-27 15:45
66666666666666666666666
作者: wode13078411531    时间: 2017-7-28 20:23

感谢楼主分享哦
作者: yz110112    时间: 2017-7-31 17:13
不懂PHP微信支付开发,看这个贴就知道了 [修改]
作者: 追风筝那个傻瓜    时间: 2017-8-23 09:03
想看,想看,渴望
作者: tjwtjw    时间: 2017-8-24 17:56
phpphpphpphp

作者: a5854365    时间: 2017-8-28 17:05
看看微信支付怎么做
作者: ljmisa    时间: 2017-8-29 09:53
凤凰 i 印度海军官方估计
作者: dabour    时间: 2017-8-30 16:19
444444444444444444
作者: king包子queen    时间: 2017-9-3 23:01
..............
作者: NankingHeiMa    时间: 2017-9-11 16:37
666666666666666
作者: HZY950322    时间: 2017-9-26 10:53
终于找到调用支付的教程
作者: 465512712    时间: 2017-10-18 15:11
楼主真是好帖子呀
作者: dongyigedong    时间: 2017-10-24 14:59
看看是什么 应该很不错
作者: ventent    时间: 2017-11-4 15:11
感谢楼主,新手教程

作者: anshao19    时间: 2017-11-24 01:53
XXXXXXXXXXXXXXXXXX
作者: cmm5857    时间: 2017-12-1 09:53
厉害了我的哥
作者: 729832416    时间: 2017-12-5 18:39
谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢
作者: lwx小芯子    时间: 2017-12-26 15:51
看看,学习
作者: 101大哥    时间: 2018-1-4 11:11
1111111111111111111111111111
作者: weixin_jk    时间: 2018-1-10 13:40
不懂PHP微信支付开发,看这个贴就知道了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2