如何使用rhaphp快速开发微信支付应用?

在微信开发中,经常到会遇到微信支付与 JSSDK 的问题。可能几天都搞不定。相信大家都有遇到过吧?讲真的我第一次做支付就是这样的。那么现在福利来了。这些你都不用考虑了,只是几行代码就可以轻松实现。但是我也知道,最算什么好的事情,也是没有办法满足所有人。我已经做了一个微信支付的演示应用。这个应用功能不多作为演示与学习使用的。如果需要更多的功能,也可以自行开发。或者向在社区里提需求。那么先来看演示:(请下载附件后安装)

1.png


1.png


1.png

代码请你下载文章下的附件,如果你对应用开发还不熟悉的话,你可以花上几分钟看一下文档教程,也是快速上手的。

那么先来看代码,打开 chongZhi/controller/Deposit.php:
public function topUp()
{

if (Request::instance()->isPost()) {
if ($member = getMember()) {
$money = input('post.money');
if (isset($member['openid']) && !empty($member['openid'])) {
if (empty($money) || $money < 0.09) {
ajaxMsg(0, '金额最小为0.1元');
} else {
$mid = $this->mid;
if (!$mid && $mid != $member['mpid']) {
ajaxMsg(0, '公众号标识与当前用户不匹配');
}
$model = new Payment();
if ($id = $model->addPayment($member['id'], $member['mpid'], $money, '账户充值')) {
ajaxReturn(['url' => getWxPayUrl($this->mid,['payment_id' => $id,'view'=>$this->addonRoot.'/view/common/pay.html'])]);
} else {
ajaxMsg(0, '下单失败');
}
}
} else {
ajaxMsg(0, '支付参数:openid不存在');
}
} else {
ajaxMsg(0, '用户不存在');
}
} else {
$this->assign('title', '账户充值');
$this->fetch();
}
}
在以上的代码中,其实在微信支付上只有几行是重点的:
$model = new Payment();
$id = $model->addPayment($member['id'], $member['mpid'], $money, '账户充值');
getWxPayUrl($this->mid,['payment_id' => $id,'view'=>$this->addonRoot.'/view/common/pay.html'])

解释一下:支付首先要有定单对吧,这个就不必多说了吧。
$model->addPayment($member['id'], $member['mpid'], $money, '账户充值');
        这里就是创建定单的,第一个参数就是会员 ID 号,第二个参数就是当前公众号的 ID 号。第三个就是金额了。如果是1元就填写1,一分就是0.1,经常抢红包的同学应该对这个0.1非常熟悉吧?第四个参数就是商品标题了。由于我这里是充值,那么我就写了账户充值了。如果你想知道更多的参数,看一下Payment模型。

      增加定单成功后这里会返回一个定单 ID 的。有了定单后那么就是跳转支付页面了。我这里是 AJAX 是所以我这里是返回JSON 返回前端 转跳了。
getWxPayUrl()
       这个函数主要解决了,微信支付授权目录的,意义重大。很多人都是遇到微信支付当前页面的URL未注册。这样的错误,其实就是支付目录错误。那么系统默认了:http://域名/service/payment/wxpay 。只要你把这个授权填写到微信官方支付后台。就可以了。
getWxPayUrl()第一个参数是公众号的 ID,第一个就是数组形式的。
['payment_id' => $id],payment_id是必须的。view如果你想自定的支付页面就填写你的模板路径。如果为空就是使用官方默认的支付页面的模板。这里相信比较多的同学还是满意这种灵活吧。

如果你在使用过程中,有任何问题,请在Rhaphp官方社区求助。必回!

29 个评论

站在巨人的肩膀上写代码。。。真是轻松不少
geeson

geeson 回复 seqier

还会继续努力,做更好的东西
一分不应该是0.01?
geeson

geeson 回复 qshaw

是的
在 这是自定模版页面,点击“立即支付 ” 没一点反映,不能吊起 微信支付流程 ,填写支付密码,什么原因
在微信开发工具里面调试一下,看看报什么错误
$.post("",{'payment_id':"12"},function (res) {
Uncaught TypeError: $.alert is not a function
$.alert is not a function 直接 alert()试试
errMsg:FAILappid不存在
填写你的appid
在后台 添加服务号 ,填写过了 appid,还是 在 chongZhi.zip 这里填写?
在哪里填appid?上面的案例 是扫码支付把, 微信服务号支付 怎么操作
系统后台填写
都填好的
我检查了下 appid 复制时,后面多个空格 ,现在 点击立即支付 ,会一闪 出现 微信支付 4个字,但没有出现 chooseWXPay:没有此SDK或暂不支持此SDK模拟"
开发工具不支持支付的,要在微信中打开
点击立即支付 ,会一闪 出现 微信支付 4个字,然后 就不动了
你在关注一下 RHAPHP 官方公众号试一下,这个应用包演示包与公众演示代码一模一样的。如果能行的话,检查一下,把 DEBUG 开起来,看看什么错误
可以了 ,就是付款结束后,一直停在支付页面 ,没跳转到指定页面
提示:(你还没有保存授权&注册设置,请先前往设置
geeson

geeson 回复 ininvi

设置一下
ininvi

ininvi 回复 geeson

不好意思,小白。基本上能设置的都已经设置了...“['payment_id' => $id],payment_id是必须的。”刚才填写了,但是格式不知道是不是正确的。烦请详解...
昨天把支付搞了下,写下我遇到的坑。
提交了不能支付,看日志curl错误60.百度了下把WxPay.api.php文件的536行文件改成了这样。
/**
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验 **/
if(stripos($url,"https://")!==FALSE){
curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
} else {
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//严格校验
估计默认微信支付是不支持http域名的。所以要改下。
后来出FALL_mch_id参数格式错误,看了下是商户号后面多了个空格。删除就好。直接复制过来就有空格。
建议保存配置文件的时候默认删除首尾空,待会我自己的会去改下的。
geeson

geeson 回复 ininvi

getWxPayUrl('mpid',['payment_id' => $id])后面是数组
好下的,感谢反馈
ininvi

ininvi 回复 geeson

mp.ininvi.com/app/chongZhi/deposit/index/mid/2 烦请看一下
geeson

geeson 回复 ininvi

官方有 DEMO你可以跟着 DEMO 做,getWxPayUrl('mpid',['payment_id' => 定单ID]),你看看传的是什么?
getMember()里面的数据哪里来的,登录的时候如何拿到openid,写入cookie
这个插件,回调地址 在哪里填?付款后的逻辑处理?

要回复文章请先登录注册