微信支付JSAPI模式及退款CodeIgniter集成篇
微信支付接口文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_1
首先你得知道这个jsapi是不能离开微信进行调用支付的,明白了这个道理我们好下手,页面是在微信内显示并通过jsapi调用微信支付组件进行支付。
可以看看我们上一篇文章,主要是Native扫码支付模式二
我们仍然继续使用wechatpay.php这个支付集成类,简单方便好理解,不过如果应用jsapi的话这个类有个bug
在我们构造jsapi需要的参数时有个时间戳,我们用time()生成的,会报微信支付调用JSAPI缺少参数:timeStamp
修改如下:
/**
* 获取js支付使用的第二个参数
*/
public function get_package($prepay_id) {
$data = array();
$data["appId"] = $this->_config["appid"];
//改动地方,把它变成字符串
$time=time();
$data["timeStamp"] = "\"".$time."\"";
$data["nonceStr"] = $this->get_nonce_string();
$data["package"] = "prepay_id=$prepay_id";
$data["signType"] = "MD5";
$data["paySign"] = $this->sign($data);
return $data;
}
其实这个方法就是获取jsapi的支付参数了
一、微信JSAPI支付
不能忘记配置授权目录,调用jsapi我是在http://xxx.com/index.php/home下我配置了这个
首先我们还是要调用统一下单接口,获取我们要的参数(如果此类的配置放置位置等不会的请参考上篇文章),此为pay方法,在调用统一下单接口的时候我们需要知道需要哪些参数
1、要获取openid,这个我是项目用了一个微信API的类库,https://github.com/dodgepudding/wechat-php-sdk,主要是用了这里面的方法
此项目有朋友专门的对接了CodeIgniter框架的扩展类库,可以直接用,目录结构,我们直接上代码吧
public function __construct()
{
parent::__construct();
$this->load->library('CI_Wechat');//由于我的项目是时刻都跟微信绑在一起,所以直接加载在构造函数里了,不用每个方法都加载了。
$this->load->library('pagination');
}
CI_Model内容大家看下上面的类库源码,还有里面如何配置的,下面我们看看如何获取openid
function oauthurl()
{
$oauth_url = $this->ci_wechat->getOauthRedirect(base_url() . 'index.php/home/oauth', 1);
header('Location: ' . $oauth_url);
exit();
} function oauth()
{
if (!isset($_GET['code'])) { //触发微信返回code码
$baseUrl = urlencode('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . $_SERVER['QUERY_STRING']);
$url = $this->__CreateOauthUrlForCode($baseUrl);
Header("Location: $url");
exit(); } else {
$json = $this->ci_wechat->getOauthAccessToken();
$openid = $json['openid'];
//注册用户,成功后可以抢单
//return $this->_isRegistered($_SESSION['user']['openid']);
return $openid; }
}
以上两个方法就是获取openid的,获取之后我是保存在session里的,我每个页面都判断是否获取了openid如果没有获取直接
$this->session->set_userdata('openid', $this->oauth());
这样保证一直能得到openid
2、构造JSAPI支付所需参数(统一下单的参数构造)
$this->load->model('publist');//获取订单信息
$pub = $this->publist->GetList(array('id' => $_SESSION['orderid']));
//微信支付配置的参数配置读取
$this->load->config('wxpay_config');
$wxconfig['appid']=$this->config->item('appid');
$wxconfig['mch_id']=$this->config->item('mch_id');
$wxconfig['apikey']=$this->config->item('apikey');
$wxconfig['appsecret']=$this->config->item('appsecret');
$wxconfig['sslcertPath']=$this->config->item('sslcertPath');
$wxconfig['sslkeyPath']=$this->config->item('sslkeyPath');
$this->load->library('Wechatpay',$wxconfig);
//商户交易单号
$out_trade_no = $pub->listno;
$total_fee=$pub->fee;
$openid=$_SESSION['openid'];
$param['body']="黑人牙膏";
$param['attach']=$pub->id;
$param['detail']="黑人牙膏-".$out_trade_no;
$param['out_trade_no']=$out_trade_no;
$param['total_fee']=$total_fee*100;
$param["spbill_create_ip"] =$_SERVER['REMOTE_ADDR'];
$param["time_start"] = date("YmdHis");
$param["time_expire"] =date("YmdHis", time() + 600);
$param["goods_tag"] = "黑人牙膏";
$param["notify_url"] = base_url()."index.php/home/notify";
$param["trade_type"] = "JSAPI";
$param["openid"] = $openid; //统一下单,获取结果,结果是为了构造jsapi调用微信支付组件所需参数
$result=$this->wechatpay->unifiedOrder($param); //如果结果是成功的我们才能构造所需参数,首要判断预支付id if (isset($result["prepay_id"]) && !empty($result["prepay_id"])) {
//调用支付类里的get_package方法,得到构造的参数
$data['parameters']=json_encode($this->wechatpay->get_package($result['prepay_id']));
$data['notifyurl']=$param["notify_url"];
$data['fee']=$total_fee;
$data['pubid']=$_SESSION['orderid']; $this->load->view('home/header');
//要有个页面将以上数据传递过去并展示给用户
$this->load->view('home/pay', $data);
$this->load->view('home/footer');
}
3、支付页面,views视图pay.php
<?php
$jsApiParameters = $parameters;//参数赋值
?> <script type="text/javascript">
//调用微信JS api 支付
function jsApiCall()
{
WeixinJSBridge.invoke(
'getBrandWCPayRequest',
<?php echo $jsApiParameters; ?>,
function(res){
WeixinJSBridge.log(res.err_msg);
if(res.err_msg == "get_brand_wcpay_request:ok" ){
$.alert('支付成功');
//我在这里选择了前台只要支付成功将单号传递更新数据
$.ajax({
url:'<?php echo $notifyurl.'/'.$pubid;?>',
dataType:'json',
success : function(ret){
if(ret==1){
//成功后返回我的订单页面
location.href="<?php echo base_url().'index.php/home/myorder';?>";
}
}
});
}else
{
//$.alert('支付失败');
}
//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();
}
}
</script>
<div class="hd">
<h1 class="page_title">支付佣金</h1>
<p class="page_desc">请认真核对佣金金额</p>
</div>
<div class="weui_cells">
<div class="weui_cell">
<div class="weui_cell_hd weui_cell_primary">
该笔订单支付金额为<span style="color:#f00;font-size:50px"><?php echo $fee; ?></span>元钱
</div>
</div>
</div>
<button class="weui_btn weui_btn_primary" type="button" onclick="callpay()" >立即支付</button>
以上代码可以用微信web开发者工具,使用方式自己看看吧,有了这个工具调试不再难
4、支付成功跳转页面,我们看notify方法
function notify()
{
$id = $this->uri->segment(3);
if (isset($_SESSION['openid'])) {
$this->load->model('publist');//更新业务逻辑
$rs = $this->publist->UpdateList(array('id' => $id, 'feestatus' => 1));
if ($rs > 0) {
echo 1;
exit;
} else {
echo 0;
exit;
}
}
}
这样我们的支付流程就彻底走完了。
二、当我们支付完之后,有些单子可以退单的,如何将款项也退回呢
aaarticlea/png;base64,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" alt="" />
以上场景要弄明白了
我们申请退款需要参数有哪些?我们看看支付类里的退款方法
/**
* 申请退款 - 使用商户订单号
* @param $out_trade_no 商户订单号
* @param $out_refund_no 退款单号
* @param $total_fee 总金额(单位:分)
* @param $refund_fee 退款金额(单位:分)
* @param $op_user_id 操作员账号
* @return array
*/
public function refund($out_trade_no,$out_refund_no,$total_fee,$refund_fee,$op_user_id){
$data = array();
$data["appid"] = $this->_config["appid"];
$data["mch_id"] = $this->_config["mch_id"];
$data["nonce_str"] = $this->get_nonce_string();
$data["out_trade_no"] = $out_trade_no;
$data["out_refund_no"] = $out_refund_no;
$data["total_fee"] = $total_fee;
$data["refund_fee"] = $refund_fee;
$data["op_user_id"] = $op_user_id;
$result = $this->post(self::URL_REFUND, $data,true); return $result;
}
商户订单号,商户提供的退单号,付款金额,退款金额(不能退的比实际付款的多),操作员(一般商户号)
控制器内写退款方法
//申请退款
function refund($id="")
{
if($id==""){
//方便我手动调用退单
$id = $this->uri->segment(3);
}
if (isset($id) && $id != "") {
$this->load->model('publist');
//1、取消订单可以退款。2、失败订单可以退款
$pub = $this->publist->GetList(array('id' => $id));
if ($pub->liststatus == 3 || $pub->liststatus == 4) {
$listno = $pub->listno;
$fee = $pub->fee * 100; $this->load->config('wxpay_config');
$wxconfig['appid']=$this->config->item('appid');
$wxconfig['mch_id']=$this->config->item('mch_id');
$wxconfig['apikey']=$this->config->item('apikey');
$wxconfig['appsecret']=$this->config->item('appsecret');
$wxconfig['sslcertPath']=$this->config->item('sslcertPath');
$wxconfig['sslkeyPath']=$this->config->item('sslkeyPath');
$this->load->library('Wechatpay',$wxconfig); if (isset($listno) && $listno != "") {
$out_trade_no = $listno;
$total_fee = $fee;
$refund_fee = $fee;
//自定义商户退单号
$out_refund_no=$wxconfig['mch_id'].date("YmdHis");
$result=$this->wechatpay->refund($out_trade_no,$out_refund_no,$total_fee,$refund_fee,$wxconfig['mch_id']); log::DEBUG(json_encode($result));
if (isset($result["return_code"]) && $result["return_code"]="SUCCESS"&&isset($result["result_code"]) && $result["result_code"]="SUCCESS") {
echo "<script>$.toast('退款成功')</script>";
}
//佣金状态更改为已退款
$this->publist->UpdateList(array('id'=>$id,'liststatus'=>3,'listoutno'=>$out_refund_no));
redirect('home/myorder');
}
}
}
}
试试就好了,很快就可以接到退款消息
以上是这几天摸索出来的东西,分享给大家。
微信支付JSAPI模式及退款CodeIgniter集成篇的更多相关文章
- 微信支付Native扫码支付模式二之CodeIgniter集成篇
CI:3.0.5 微信支付API类库来自:https://github.com/zhangv/wechat-pay 请先看一眼官方场景及支付时序图:https://pay.weixin.qq.com/ ...
- ThinkPHP中实现微信支付(jsapi支付)流程
https://blog.csdn.net/sinat_35861727/article/details/72783988 之前写过一篇文章讲了 PHP实现微信支付(jsapi支付)流程 ,详见文章: ...
- 微信支付JsApi 40163错误
微信支付JsApi 40163错误错误:未定义数组索引:openid .经过检查发现是 :微信支付授权获取 openId {“errcode”:40163,“errmsg”:“code been us ...
- 微信JSApi支付~微信支付代理模式的实现(原创)
返回目录 起因(大叔原创) 对于微信支付来说,你的发起者需要配置对应的域名来获取code(获取用户信息接口),而这意味着,你的多个项目(域名不同)不能同时使用一个公众号,这是一件很操蛋的事,对于我们开 ...
- 微信支付-JSAPI支付V3-查询退款
接口地址 接口链接:https://api.mch.weixin.qq.com/pay/refundquery 是否需要证书 不需要. 请求参数 字段名 变量名 必填 类型 示例值 描述 公众账号ID ...
- 微信支付服务商模式(受理机构模式)开发注意事项,jsapi支付
1.首先下载的demo,一般都是有些bug的,先要改一下. 2.微信貌似没有为服务商模式单独开发demo,下载的也都是普通商户的支付demo,其实这里没有必要单独写,因为他们区别就是几个参数的区别. ...
- [微信开发] - 微信支付 JSAPI 形式
微信官方的JSAPI文档 微信官方的JSAPI支付SDK与DEMO下载 查看JSAPI的API可以从这里看 下载了支付DEMO其实有些地方不对的,比如如果做沙盒测试的时候,需要使用getsignkey ...
- 微信支付JSAPI支付
1.介绍 JSAPI支付是用户在微信中打开商户的H5页面,商户在H5页面通过调用微信支付提供的JSAPI接口调起微信支付模块完成支付.应用场景有: ◆ 用户在微信公众账号内进入商家公众号,打开某 ...
- 关于IOS调用微信支付jsapi不起作用的解决方法
微信支付时,安卓机调用 jsapi可以支付,IOS就不行,点击立即支付,直接返回原立即支付页面,跟刷新页面差不多,解决方案很简单:两句话而已. 不得不说,微信支付坑太多了,我擦..... <sc ...
随机推荐
- BLE 蓝牙协议栈开发
1.由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(1) 2.由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(2) 3.由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(3)
- java中Arraylist复制方法
方法一: ArrayList<Integer> mycopy=new ArrayList<Integer>(); mycopy=(ArrayList<Integer> ...
- java-map和object装换
/** * 使用org.apache.commons.beanutils进行转换 */ class A { public static Object mapToObject(Map<String ...
- C#-WebForm-ASP开发练习:从数据库中动态添加信息
传统的ASP开发方式,是C#代码和HTML代码混合在一起,ASP与ASP.NET不是一个东西. <% %> - 可以扩起来一段范围,这一段范围之内只能允许编写C#代码 <%= ...
- Mvc中域的添加和不同域之间的跳转
一.在新添加的域中中的 AreaRegistration中作如下设置: 二.在原来的Global.asax中设置: 三.不同域之间的跳转 @Url.Action("Index", ...
- <<< ajaxfileupload介绍
ajaxfileupload,jquery的一个异步上传插件,使用此插件你可以不用建立form,他会自动生成表单,且自动设置好enctype="multipart/form-data&quo ...
- 多视图学习(multiview learning)
多视图学习(multi-view learning) 前期吹牛:今天这一章我们就是来吹牛的,刚开始老板在和我说什么叫多视图学习的时候,我的脑海中是这么理解的:我们在欣赏妹子福利照片的时候,不能只看45 ...
- zTree 循环树
/// <summary> /// 初始化第一次节点加载 /// </summary> /// protected string _menu = string.Empty; p ...
- mysql中文乱码解决方法
latin1(1和l的区别,l要么没有缺缺,要么缺缺是向左的直的; 1向左的缺缺是弯曲的,应该是可以看得出来的)是8位的字符集,表示英文和西欧字母. 瑞士: Switzerland [swits2la ...
- javascript 高级程序设计 -有感
本来我想写一个高级程序设计总结的,结果发现我进入了一扇门,里面所有的字都要逐字逐句的理解,所有描述已经是非常精炼了,我最初的想法无异于老鼠吃大象. 我现在记录的是我在看这本时的感想. 2015.4月9 ...