作者 郭盛
1 个管道 的构建 通过 耗费 5 秒

购物车接口

... ... @@ -19,8 +19,8 @@
<file leaf-file-name="User.php" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/application/api/controller/User.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="537">
<caret line="453" column="58" lean-forward="false" selection-start-line="453" selection-start-column="58" selection-end-line="453" selection-end-column="58" />
<state relative-caret-position="25">
<caret line="748" column="41" lean-forward="false" selection-start-line="748" selection-start-column="41" selection-end-line="748" selection-end-column="41" />
<folding>
<element signature="e#38#68#0#PHP" expanded="true" />
<element signature="e#337#456#0#PHP" expanded="false" />
... ... @@ -38,6 +38,7 @@
<element signature="e#11641#12217#0#PHP" expanded="false" />
<element signature="e#12222#12769#0#PHP" expanded="false" />
<element signature="e#12775#13459#0#PHP" expanded="false" />
<element signature="e#13464#15254#0#PHP" expanded="false" />
<element signature="e#15260#16130#0#PHP" expanded="false" />
<element signature="e#16135#18229#0#PHP" expanded="false" />
<element signature="e#18235#18612#0#PHP" expanded="false" />
... ... @@ -51,13 +52,12 @@
<element signature="e#21466#21824#0#PHP" expanded="false" />
<element signature="e#21829#22019#0#PHP" expanded="false" />
<element signature="e#22025#23168#0#PHP" expanded="false" />
<element signature="e#23173#25728#0#PHP" expanded="false" />
<element signature="e#25734#26225#0#PHP" expanded="false" />
<element signature="e#26230#27443#0#PHP" expanded="false" />
<element signature="e#27449#27983#0#PHP" expanded="false" />
<element signature="e#27988#28902#0#PHP" expanded="false" />
<element signature="e#28908#29439#0#PHP" expanded="false" />
<element signature="e#29444#30364#0#PHP" expanded="false" />
<element signature="e#25844#26335#0#PHP" expanded="false" />
<element signature="e#26340#27427#0#PHP" expanded="false" />
<element signature="e#27433#27967#0#PHP" expanded="false" />
<element signature="e#27972#28886#0#PHP" expanded="false" />
<element signature="e#28892#29423#0#PHP" expanded="false" />
<element signature="e#29428#30348#0#PHP" expanded="false" />
</folding>
</state>
</provider>
... ... @@ -66,14 +66,20 @@
<file leaf-file-name="Pay.php" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/application/api/controller/Pay.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="525">
<caret line="102" column="35" lean-forward="false" selection-start-line="102" selection-start-column="35" selection-end-line="102" selection-end-column="35" />
<state relative-caret-position="450">
<caret line="94" column="7" lean-forward="false" selection-start-line="94" selection-start-column="7" selection-end-line="94" selection-end-column="7" />
<folding>
<element signature="e#450#569#0#PHP" expanded="false" />
<element signature="e#575#888#0#PHP" expanded="false" />
<element signature="e#893#2938#0#PHP" expanded="false" />
<element signature="e#5337#5554#0#PHP" expanded="false" />
<element signature="e#5581#7480#0#PHP" expanded="false" />
<element signature="e#2944#3362#0#PHP" expanded="false" />
<element signature="e#3367#7202#0#PHP" expanded="false" />
<element signature="e#7208#7628#0#PHP" expanded="false" />
<element signature="e#7633#11475#0#PHP" expanded="false" />
<element signature="e#11502#13401#0#PHP" expanded="false" />
<element signature="e#13430#14260#0#PHP" expanded="false" />
<element signature="e#14289#15122#0#PHP" expanded="false" />
<element signature="e#15145#15362#0#PHP" expanded="false" />
</folding>
</state>
</provider>
... ... @@ -152,11 +158,11 @@
<sorting>DEFINITION_ORDER</sorting>
</component>
<component name="PhpWorkspaceProjectConfiguration" backward_compatibility_performed="true" />
<component name="ProjectFrameBounds">
<option name="x" value="441" />
<option name="y" value="86" />
<component name="ProjectFrameBounds" extendedState="1">
<option name="x" value="136" />
<option name="y" value="61" />
<option name="width" value="1699" />
<option name="height" value="974" />
<option name="height" value="970" />
</component>
<component name="ProjectView">
<navigator currentView="ProjectPane" proportions="" version="1">
... ... @@ -173,7 +179,7 @@
<foldersAlwaysOnTop value="true" />
</navigator>
<panes>
<pane id="Scope" />
<pane id="Scratches" />
<pane id="ProjectPane">
<subPane>
<expand>
... ... @@ -209,7 +215,7 @@
<select />
</subPane>
</pane>
<pane id="Scratches" />
<pane id="Scope" />
</panes>
</component>
<component name="PropertiesComponent">
... ... @@ -253,7 +259,8 @@
<workItem from="1574141466352" duration="745000" />
<workItem from="1574143209694" duration="3660000" />
<workItem from="1574146994475" duration="23222000" />
<workItem from="1574209189943" duration="31449000" />
<workItem from="1574209189943" duration="37638000" />
<workItem from="1574252363848" duration="62000" />
</task>
<task id="LOCAL-00001" summary="调试">
<created>1574145133364</created>
... ... @@ -266,7 +273,7 @@
<servers />
</component>
<component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="103024000" />
<option name="totallyTimeSpent" value="109275000" />
</component>
<component name="TodoView">
<todo-panel id="selected-file">
... ... @@ -278,16 +285,16 @@
</todo-panel>
</component>
<component name="ToolWindowManager">
<frame x="441" y="86" width="1699" height="974" extended-state="0" />
<frame x="136" y="61" width="1699" height="970" extended-state="1" />
<layout>
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.14887126" sideWeight="0.5" order="1" side_tool="false" content_ui="combo" />
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.15070164" sideWeight="0.5" order="1" side_tool="false" content_ui="combo" />
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32912987" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" />
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="true" content_ui="tabs" />
<window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Terminal" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.15053764" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Terminal" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.15006003" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="true" content_ui="tabs" />
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
... ... @@ -443,7 +450,6 @@
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="200">
<caret line="8" column="33" lean-forward="false" selection-start-line="8" selection-start-column="27" selection-end-line="8" selection-end-column="33" />
<folding />
</state>
</provider>
</entry>
... ... @@ -487,7 +493,6 @@
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="175">
<caret line="7" column="29" lean-forward="false" selection-start-line="7" selection-start-column="29" selection-end-line="7" selection-end-column="29" />
<folding />
</state>
</provider>
</entry>
... ... @@ -495,32 +500,16 @@
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1200">
<caret line="169" column="27" lean-forward="false" selection-start-line="169" selection-start-column="27" selection-end-line="169" selection-end-column="27" />
<folding>
<element signature="e#693#1831#0#PHP" expanded="false" />
<element signature="e#1863#3665#0#PHP" expanded="false" />
<element signature="e#3697#5737#0#PHP" expanded="false" />
<element signature="e#5743#5987#0#PHP" expanded="false" />
<element signature="e#5993#6139#0#PHP" expanded="false" />
<element signature="e#6144#11945#0#PHP" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/application/api/controller/Demo.php" />
<entry file="file://$PROJECT_DIR$/application/api/controller/Ems.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/application/api/controller/Ems.php" />
<entry file="file://$PROJECT_DIR$/application/api/controller/Index.php" />
<entry file="file://$PROJECT_DIR$/application/admin/controller/Video.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1464">
<caret line="169" column="0" lean-forward="true" selection-start-line="169" selection-start-column="0" selection-end-line="169" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
... ... @@ -542,7 +531,6 @@
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="350">
<caret line="14" column="34" lean-forward="false" selection-start-line="14" selection-start-column="34" selection-end-line="14" selection-end-column="34" />
<folding />
</state>
</provider>
</entry>
... ... @@ -557,7 +545,6 @@
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
... ... @@ -566,7 +553,6 @@
<state split_layout="SPLIT">
<first_editor relative-caret-position="-825">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</first_editor>
<second_editor />
</state>
... ... @@ -576,9 +562,6 @@
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="566">
<caret line="26" column="33" lean-forward="false" selection-start-line="26" selection-start-column="33" selection-end-line="26" selection-end-column="33" />
<folding>
<marker date="1574213237432" expanded="true" signature="384:782" ph="{&quot;php&quot;: &quot;&gt;=5.6.0&quot;...}" />
</folding>
</state>
</provider>
</entry>
... ... @@ -586,7 +569,6 @@
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="297">
<caret line="25" column="6" lean-forward="false" selection-start-line="25" selection-start-column="6" selection-end-line="25" selection-end-column="6" />
<folding />
</state>
</provider>
</entry>
... ... @@ -594,7 +576,6 @@
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="411">
<caret line="28" column="9" lean-forward="false" selection-start-line="28" selection-start-column="9" selection-end-line="28" selection-end-column="9" />
<folding />
</state>
</provider>
</entry>
... ... @@ -602,7 +583,6 @@
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="261">
<caret line="25" column="58" lean-forward="false" selection-start-line="25" selection-start-column="58" selection-end-line="25" selection-end-column="58" />
<folding />
</state>
</provider>
</entry>
... ... @@ -610,7 +590,6 @@
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="400">
<caret line="43" column="60" lean-forward="true" selection-start-line="43" selection-start-column="60" selection-end-line="43" selection-end-column="60" />
<folding />
</state>
</provider>
</entry>
... ... @@ -618,7 +597,6 @@
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
... ... @@ -626,7 +604,6 @@
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-116">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
... ... @@ -634,7 +611,6 @@
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="150">
<caret line="6" column="26" lean-forward="true" selection-start-line="6" selection-start-column="26" selection-end-line="6" selection-end-column="26" />
<folding />
</state>
</provider>
</entry>
... ... @@ -642,7 +618,6 @@
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="175">
<caret line="7" column="10" lean-forward="true" selection-start-line="7" selection-start-column="10" selection-end-line="7" selection-end-column="10" />
<folding />
</state>
</provider>
</entry>
... ... @@ -650,7 +625,6 @@
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="25">
<caret line="22" column="31" lean-forward="true" selection-start-line="22" selection-start-column="31" selection-end-line="22" selection-end-column="31" />
<folding />
</state>
</provider>
</entry>
... ... @@ -658,7 +632,6 @@
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="300">
<caret line="12" column="24" lean-forward="false" selection-start-line="12" selection-start-column="24" selection-end-line="12" selection-end-column="24" />
<folding />
</state>
</provider>
</entry>
... ... @@ -666,7 +639,6 @@
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="459">
<caret line="36" column="65" lean-forward="true" selection-start-line="36" selection-start-column="65" selection-end-line="36" selection-end-column="65" />
<folding />
</state>
</provider>
</entry>
... ... @@ -674,7 +646,6 @@
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="161">
<caret line="59" column="10" lean-forward="false" selection-start-line="59" selection-start-column="10" selection-end-line="59" selection-end-column="10" />
<folding />
</state>
</provider>
</entry>
... ... @@ -682,7 +653,6 @@
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="330">
<caret line="59" column="10" lean-forward="false" selection-start-line="59" selection-start-column="10" selection-end-line="59" selection-end-column="10" />
<folding />
</state>
</provider>
</entry>
... ... @@ -696,22 +666,28 @@
</entry>
<entry file="file://$PROJECT_DIR$/application/api/controller/Pay.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="525">
<caret line="102" column="35" lean-forward="false" selection-start-line="102" selection-start-column="35" selection-end-line="102" selection-end-column="35" />
<state relative-caret-position="450">
<caret line="94" column="7" lean-forward="false" selection-start-line="94" selection-start-column="7" selection-end-line="94" selection-end-column="7" />
<folding>
<element signature="e#450#569#0#PHP" expanded="false" />
<element signature="e#575#888#0#PHP" expanded="false" />
<element signature="e#893#2938#0#PHP" expanded="false" />
<element signature="e#5337#5554#0#PHP" expanded="false" />
<element signature="e#5581#7480#0#PHP" expanded="false" />
<element signature="e#2944#3362#0#PHP" expanded="false" />
<element signature="e#3367#7202#0#PHP" expanded="false" />
<element signature="e#7208#7628#0#PHP" expanded="false" />
<element signature="e#7633#11475#0#PHP" expanded="false" />
<element signature="e#11502#13401#0#PHP" expanded="false" />
<element signature="e#13430#14260#0#PHP" expanded="false" />
<element signature="e#14289#15122#0#PHP" expanded="false" />
<element signature="e#15145#15362#0#PHP" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/application/api/controller/User.php">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="537">
<caret line="453" column="58" lean-forward="false" selection-start-line="453" selection-start-column="58" selection-end-line="453" selection-end-column="58" />
<state relative-caret-position="25">
<caret line="748" column="41" lean-forward="false" selection-start-line="748" selection-start-column="41" selection-end-line="748" selection-end-column="41" />
<folding>
<element signature="e#38#68#0#PHP" expanded="true" />
<element signature="e#337#456#0#PHP" expanded="false" />
... ... @@ -729,6 +705,7 @@
<element signature="e#11641#12217#0#PHP" expanded="false" />
<element signature="e#12222#12769#0#PHP" expanded="false" />
<element signature="e#12775#13459#0#PHP" expanded="false" />
<element signature="e#13464#15254#0#PHP" expanded="false" />
<element signature="e#15260#16130#0#PHP" expanded="false" />
<element signature="e#16135#18229#0#PHP" expanded="false" />
<element signature="e#18235#18612#0#PHP" expanded="false" />
... ... @@ -742,13 +719,12 @@
<element signature="e#21466#21824#0#PHP" expanded="false" />
<element signature="e#21829#22019#0#PHP" expanded="false" />
<element signature="e#22025#23168#0#PHP" expanded="false" />
<element signature="e#23173#25728#0#PHP" expanded="false" />
<element signature="e#25734#26225#0#PHP" expanded="false" />
<element signature="e#26230#27443#0#PHP" expanded="false" />
<element signature="e#27449#27983#0#PHP" expanded="false" />
<element signature="e#27988#28902#0#PHP" expanded="false" />
<element signature="e#28908#29439#0#PHP" expanded="false" />
<element signature="e#29444#30364#0#PHP" expanded="false" />
<element signature="e#25844#26335#0#PHP" expanded="false" />
<element signature="e#26340#27427#0#PHP" expanded="false" />
<element signature="e#27433#27967#0#PHP" expanded="false" />
<element signature="e#27972#28886#0#PHP" expanded="false" />
<element signature="e#28892#29423#0#PHP" expanded="false" />
<element signature="e#29428#30348#0#PHP" expanded="false" />
</folding>
</state>
</provider>
... ...
... ... @@ -90,64 +90,189 @@ class Pay extends Api
* @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
*
* @ApiParams (name="order_id", type="inter", required=true, description="订单id")
* @ApiParams (name="type", type="inter", required=true, description="支付方式 1 为余额支付 2为微信支付")
*
*/
public function picpay(){
$rule = config('verify.path');
if($this->request->isPost()){
$order_id = $this->request->post('order_id');
$type = $this->request->post('type');
if(empty($type)){
$this->error(['code'=>2,'msg'=>'缺少必要参数']);
}
$openid = $this->getopenid();
if(empty($openid)){
$this->error(['code'=>2,'msg'=>'openid不能为空']);
}
$data = Db::name('order')->where('id',$order_id)->find();
if($data){
if($data['status'] == 2){
$this->error('该订单已支付过了');
}else{
//创建支付对象
$config = config('verify.wx_pay');
$app = Factory::payment($config);
$result = $app->order->unify([
'body' => '山东航拍',
'out_trade_no' => $data['num'],//支付订单号
'total_fee' => $data['money']*100,//单位分
'notify_url' => $rule.'api/pay/payOrderNotify', // 支付结果通知网址,如果不设置则会使用配置里的默认地址
'trade_type' => 'JSAPI', // 请对应换成你的支付方式对应的值类型
'openid' => $openid,
]);
if($result['return_code'] === 'SUCCESS' && $result['result_code'] === 'SUCCESS'){
$params = [
'appId' => $config['app_id'],
'timeStamp' => time(),
'nonceStr' => $result['nonce_str'], // 统一下单返回的随机字符串
'package' => 'prepay_id='.$result['prepay_id'], // 统一下单Id
'signType' => 'MD5', // 签名方法
];
// 注意这里用的是商户平台的Key进行二次签名
$params['paySign'] = generate_sign($params, $config['key']);
$this->success('成功',$params);
if($type == 1){
if($data){
if($data['status'] == 2){
$this->error('该订单已支付过了');
}else{
$res = Db::name('user')
->where('id',$data['user_id'])
->find();
if($data['total'] > $res['money']){
$this->error(['code'=>2,'msg'=>'余额不足,请充值后重试']);
}
$money = $res['money'] - $data['total'];
// 启动事务
Db::startTrans();
try{
$arr = Db::name('user')->where('id',$data['user_id'])->update(['money'=>$money]);
$res = Db::name('order')->where('id',$order_id)->update(['status'=>2,'paytime'=>time()]);
if($res && $arr){
true;
}else{
$this->error('购买失败');
}
// 提交事务
Db::commit();
} catch (\Exception $e) {
dump($e->getMessage());
// 回滚事务
Db::rollback();
}
}
$this->error($result['err_code_des']);
}else{
$this->error('无效的订单');
}
}else{
$this->error('无效的订单');
if($data){
if($data['status'] == 2){
$this->error('该订单已支付过了');
}else{
//创建支付对象
$config = config('verify.wx_pay');
$app = Factory::payment($config);
$result = $app->order->unify([
'body' => '山东航拍',
'out_trade_no' => $data['num'],//支付订单号
'total_fee' => $data['total']*100,//单位分
'notify_url' => $rule.'api/pay/picOrderNotify', // 支付结果通知网址,如果不设置则会使用配置里的默认地址
'trade_type' => 'JSAPI', // 请对应换成你的支付方式对应的值类型
'openid' => $openid,
]);
if($result['return_code'] === 'SUCCESS' && $result['result_code'] === 'SUCCESS'){
$params = [
'appId' => $config['app_id'],
'timeStamp' => time(),
'nonceStr' => $result['nonce_str'], // 统一下单返回的随机字符串
'package' => 'prepay_id='.$result['prepay_id'], // 统一下单Id
'signType' => 'MD5', // 签名方法
];
// 注意这里用的是商户平台的Key进行二次签名
$params['paySign'] = generate_sign($params, $config['key']);
$this->success('成功',$params);
}
$this->error($result['err_code_des']);
}
}else{
$this->error('无效的订单');
}
}
}else{
$this->error('请求方式错误');
}
}
//获取用户openid
public function getopenid()
{
$user_id = $this->uid;
$openid = Db::name('user')
->where('id',$user_id)
->field('openid')
->find();
/**
* @ApiTitle (视频购买支付)
* @ApiSummary (视频购买支付)
* @ApiMethod (POST)
* @ApiRoute (/api/pay/videopay)
* @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
*
* @ApiParams (name="order_id", type="inter", required=true, description="订单id")
* @ApiParams (name="type", type="inter", required=true, description="支付方式 1 为余额支付 2为微信支付")
*
*/
public function videopay(){
$rule = config('verify.path');
if($this->request->isPost()){
$order_id = $this->request->post('order_id');
$openid = $this->getopenid();
if(empty($openid)){
$this->error(['code'=>2,'msg'=>'openid不能为空']);
}
$type = $this->request->post('type');
if(empty($type)){
$this->error(['code'=>2,'msg'=>'缺少必要参数']);
}
$data = Db::name('vorder')->where('id',$order_id)->find();
if($type == 1){
if($data){
if($data['status'] == 2){
$this->error('该订单已支付过了');
}else{
$res = Db::name('user')
->where('id',$data['user_id'])
->find();
if($data['total'] > $res['money']){
$this->error(['code'=>2,'msg'=>'余额不足,请充值后重试']);
}
$money = $res['money'] - $data['total'];
// 启动事务
Db::startTrans();
try{
$arr = Db::name('user')->where('id',$data['user_id'])->update(['money'=>$money]);
$res = Db::name('vorder')->where('id',$order_id)->update(['status'=>2,'paytime'=>time()]);
if($res && $arr){
true;
}else{
$this->error('购买失败');
}
// 提交事务
Db::commit();
} catch (\Exception $e) {
dump($e->getMessage());
// 回滚事务
Db::rollback();
}
}
}else{
$this->error('无效的订单');
}
}else{
if($data){
if($data['status'] == 2){
$this->error('该订单已支付过了');
}else{
//创建支付对象
$config = config('verify.wx_pay');
$app = Factory::payment($config);
$result = $app->order->unify([
'body' => '山东航拍',
'out_trade_no' => $data['num'],//支付订单号
'total_fee' => $data['total']*100,//单位分
'notify_url' => $rule.'api/pay/videoOrderNotify', // 支付结果通知网址,如果不设置则会使用配置里的默认地址
'trade_type' => 'JSAPI', // 请对应换成你的支付方式对应的值类型
'openid' => $openid,
]);
if($result['return_code'] === 'SUCCESS' && $result['result_code'] === 'SUCCESS'){
$params = [
'appId' => $config['app_id'],
'timeStamp' => time(),
'nonceStr' => $result['nonce_str'], // 统一下单返回的随机字符串
'package' => 'prepay_id='.$result['prepay_id'], // 统一下单Id
'signType' => 'MD5', // 签名方法
];
// 注意这里用的是商户平台的Key进行二次签名
$params['paySign'] = generate_sign($params, $config['key']);
$this->success('成功',$params);
}
$this->error($result['err_code_des']);
}
}else{
$this->error('无效的订单');
}
}
return $openid;
}else{
$this->error('请求方式错误');
}
}
//支付订单结果通知(无需调用)
... ... @@ -196,4 +321,64 @@ class Pay extends Api
});
$response->send();
}
//图片支付订单结果通知(无需调用)
public function picOrderNotify(){
$config = config('verify.wx_pay');
$app = Factory::payment($config);
$response = $app->handlePaidNotify(function($message, $fail){
//return_code 表示通信状态
if ($message['return_code'] === 'SUCCESS') {
if ($message['result_code'] === 'SUCCESS') {
//支付成功,更新订单状态
$toporder['status'] = 2;
$toporder['paytime'] = time();
}else{
//支付失败
$toporder['status'] = 1;
}
}else{
return $fail('通信失败,请稍后再通知我');
}
Db::name('order')->where('num',$message['out_trade_no'])->update($toporder);
return true; // 返回处理完成
});
$response->send();
}
//视频支付订单结果通知(无需调用)
public function videoOrderNotify(){
$config = config('verify.wx_pay');
$app = Factory::payment($config);
$response = $app->handlePaidNotify(function($message, $fail){
//return_code 表示通信状态
if ($message['return_code'] === 'SUCCESS') {
if ($message['result_code'] === 'SUCCESS') {
//支付成功,更新订单状态
$toporder['status'] = 2;
$toporder['paytime'] = time();
}else{
//支付失败
$toporder['status'] = 1;
}
}else{
return $fail('通信失败,请稍后再通知我');
}
Db::name('vorder')->where('num',$message['out_trade_no'])->update($toporder);
return true; // 返回处理完成
});
$response->send();
}
//获取用户openid
public function getopenid()
{
$user_id = $this->uid;
$openid = Db::name('user')
->where('id',$user_id)
->field('openid')
->find();
return $openid;
}
}
... ...
... ... @@ -739,21 +739,21 @@ class User extends Api
->find();
//判断
if($res['is_vip'] == 0){
//不是的情况
//不是会员的情况
$data = Db::name('car')
->where('user_id',$user_id)
->field('id,user_id,pic_id,video_id')
->order('id desc')
->order('createtime desc,id desc')
->select();
foreach ($data as &$v){
$v['pic'] = Db::name('pic')->field('id,title,thumbnail,url,price')->whereIn('id',explode(',',$v['pic_id']))->select();
foreach ($v['pic'] as &$val){
$val['thumbnail'] = $rule.$val['thumbnail'];
foreach ($data as &$v) {
if(!empty($v['pic_id'])){
$v['pic_id'] = Db::name('pic')->field('id,title,thumbnail,url,price')->where('id',$v['pic_id'])->find();
$v['pic_id']['thumbnail'] = $rule.$v['pic_id']['thumbnail'];
}
$v['video'] = Db::name('video')->field('id,title,thumbnail,video,two_url,four_url,eight_url,price,four_price,eight_price')->whereIn('id',explode(',',$v['video_id']))->select();
foreach ($v['video'] as &$v_video){
$v_video['thumbnail'] = $rule.$v_video['thumbnail'];
$v_video['video'] = $rule.$v_video['video'];
if(!empty($v['video_id'])){
$v['video_id'] = Db::name('video')->field('keyword,type_ids,content,is_recommend,buy_num,click_num,createtime,updatetime',true)->where('id',$v['video_id'])->find();
$v['video_id']['thumbnail'] = $rule.$v['video_id']['thumbnail'];
$v['video_id']['video'] = $rule.$v['video_id']['video'];
}
}
$this->success('SUCCESS',$data);
... ... @@ -762,25 +762,24 @@ class User extends Api
$data = Db::name('car')
->where('user_id',$user_id)
->field('id,user_id,pic_id,video_id')
->order('id desc')
->order('createtime desc,id desc')
->select();
foreach ($data as &$v){
$v['pic'] = Db::name('pic')->field('id,title,thumbnail,url,price')->whereIn('id',explode(',',$v['pic_id']))->select();
foreach ($v['pic'] as &$val){
$val['thumbnail'] = $rule.$val['thumbnail'];
$val['vip_price'] = $val['price']*0.75;
if(!empty($v['pic_id'])){
$v['pic_id'] = Db::name('pic')->field('id,title,thumbnail,url,price')->where('id',$v['pic_id'])->find();
$v['pic_id']['thumbnail'] = $rule.$v['pic_id']['thumbnail'];
$v['pic_id']['vipprice'] = $v['pic_id']['price']*0.75;
}
$v['video'] = Db::name('video')->field('id,title,thumbnail,video,two_url,four_url,eight_url,price,four_price,eight_price')->whereIn('id',explode(',',$v['video_id']))->select();
foreach ($v['video'] as &$v_video){
$v_video['thumbnail'] = $rule.$v_video['thumbnail'];
$v_video['video'] = $rule.$v_video['video'];
$v_video['vip_price'] = $v_video['price']*0.75;
$v_video['four_vipprice'] = $v_video['four_price']*0.75;
$v_video['eight_vipprice'] = $v_video['eight_price']*0.75;
if(!empty($v['video_id'])){
$v['video_id'] = Db::name('video')->field('keyword,type_ids,content,is_recommend,buy_num,click_num,createtime,updatetime',true)->where('id',$v['video_id'])->find();
$v['video_id']['thumbnail'] = $rule.$v['video_id']['thumbnail'];
$v['video_id']['video'] = $rule.$v['video_id']['video'];
$v['video_id']['vipprice'] = $v['video_id']['price'] * 0.75;
$v['video_id']['four_vipprice'] = $v['video_id']['four_price'] * 0.75;
$v['video_id']['eight_vipprice'] = $v['video_id']['eight_price'] * 0.75;
}
}
$this->success('SUCCESS',$data);
}
}
... ... @@ -805,34 +804,30 @@ class User extends Api
$user_id = $this->uid;
$pic_id = $this->request->param('pic_id');
$video_id = $this->request->param('video_id');
$data = Db::name('car')
->field('id,user_id,pic_id,video_id')
->where('user_id',$user_id)
->find();
if(empty($data)){
$param['user_id'] = $user_id;
if(empty($pic_id)){
$param['video_id'] = $this->request->param('video_id');
$param['createtime'] = time();
$param['pic_id'] = $pic_id;
$param['video_id'] = $video_id;
$param['user_id'] = $user_id;
$data = Db::name('car')
->insertGetId($param);
if($data){
$this->success('SUCCESS');
}else{
$this->error(['code'=>2,'msg'=>'sql执行失败']);
$this->error(['code'=>3,'msg'=>'加入购物车失败']);
}
}else{
$param['pic_id'] = $data['pic_id'].','.$pic_id;
$param['video_id'] = $data['video_id'].','.$video_id;
$param['updatetime'] = time();
}elseif (empty($video_id)){
$param['pic_id'] = $this->request->param('pic_id');
$param['createtime'] = time();
$param['user_id'] = $user_id;
$data = Db::name('car')
->where('user_id',$user_id)
->update($param);
->insertGetId($param);
if($data){
$this->success('SUCCESS');
}else{
$this->error(['code'=>2,'msg'=>'sql执行失败']);
$this->error(['code'=>3,'msg'=>'加入购物车失败']);
}
}else{
$this->error(['code'=>2,'msg'=>'缺少必要参数']);
}
}
... ...
此 diff 太大无法显示。