*/
class SiteController extends BaseController
{
/**
* @return array
*/
public function actions()
{
return [
'error' => [
'class' => 'yii\web\ErrorAction',
],
];
}
/**
* Displays homepage.
*
* @return string
*/
public function actionIndex()
{
// 个人信息
// p(Yii::$app->wechat->user);
// p(Yii::$app->params['wechatMember']);
return $this->render('index', [
]);
}
/**
* Login action.
*
* @return string
*/
public function actionLogin()
{
return $this->render('login', [
]);
}
/**
* Logout action.
*
* @return string
*/
public function actionLogout()
{
Yii::$app->user->logout();
return $this->goHome();
}
/**
* 生成微信JSAPI支付的Demo方法
*
* 默认禁止外部访问
* 测试请修改方法类型
*
* 注意:请开启微信的安全支付路径
* 域名/html5/site
*
* @return string
* @throws \EasyWeChat\Kernel\Exceptions\InvalidArgumentException
* @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException
* @throws \GuzzleHttp\Exception\GuzzleException
*/
private function actionWechatPay()
{
$totalFee = 100;// 支付金额单位:分
$out_trade_no = time() . StringHelper::random(8, true);
$orderData = [
'trade_type' => 'JSAPI', // JSAPI,NATIVE,APP...
'body' => '支付简单说明',
'detail' => '支付详情',
'notify_url' => Url::removeMerchantIdUrl('toApi', ['pay-notify/wechat']), // 支付结果通知网址,如果不设置则会使用配置里的默认地址
'out_trade_no' => $out_trade_no, // 支付
'total_fee' => $totalFee,
'openid' => Yii::$app->params['wechatMember']['id'], // trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识,
];
$payment = Yii::$app->wechat->payment;
$result = $payment->order->unify($orderData);
if ($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS') {
$config = $payment->jssdk->sdkConfig($result['prepay_id']);
/**
* 注意:如果需要调用扫码支付 请设置 trade_type 为 NATIVE
*
* 结果示例:weixin://wxpay/bizpayurl?sign=XXXXX&appid=XXXXX&mch_id=XXXXX&product_id=XXXXXX&time_stamp=XXXXXX&nonce_str=XXXXX
*/
/**
* $content = $payment->scheme($result['prepay_id']);
* $qr = Yii::$app->get('qr');
* Yii::$app->response->format = Response::FORMAT_RAW;
* Yii::$app->response->headers->add('Content-Type', $qr->getContentType());
*
* return $qr->setText($content)
* ->setSize(150)
* ->setMargin(7)
* ->writeString();
*/
} else {
p($result);
die();
}
return $this->render($this->action->id, [
'jssdk' => $payment->jssdk, // $app通过上面的获取实例来获取
'config' => $config
]);
}
/**
* @return string
*/
public function actionWechatJs()
{
$payment = Yii::$app->wechat->app;
return $this->render($this->action->id, [
'jssdk' => $payment->jssdk, // $app通过上面的获取实例来获取
]);
}
}