예제 #1
0
 /**
  * 生成签名结果
  * @param $para_sort 已排序要签名的数组
  * return 签名结果字符串
  */
 function buildRequestMysign($para_sort)
 {
     //把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
     $prestr = createLinkstring($para_sort);
     $mysign = "";
     switch (strtoupper(trim($this->alipay_config['sign_type']))) {
         case "RSA":
             $mysign = rsaSign($prestr, $this->alipay_config['private_key_path']);
             break;
         default:
             $mysign = "";
     }
     return $mysign;
 }
예제 #2
0
 /**
  * 生成签名结果
  * @param $para_sort 已排序要签名的数组
  * return 签名结果字符串
  */
 function buildRequestMysign($para_sort)
 {
     //把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
     $prestr = createLinkstring($para_sort);
     //                $prestr = 'partner="2088021351438614"&seller_id="*****@*****.**"&out_trade_no="120517540212075"&subject="测试的商品"&body="该测试商品的详细描述"&total_fee="0.01"&notify_url="http://notify.msp.hk/notify.htm"&service="mobile.securitypay.pay"&payment_type="1"&_input_charset="utf-8"&it_b_pay="30m"&return_url="m.alipay.com"';
     $mysign = "";
     switch (strtoupper(trim($this->alipay_config['sign_type']))) {
         case "RSA":
             $mysign = rsaSign($prestr, $this->alipay_config['private_key_path']);
             break;
         default:
             $mysign = "";
     }
     return $mysign;
 }
 /**
  * 获取请求签名
  * @param $para_temp 请求的参数数组
  * @return 签名
  */
 public function getSign($para_temp)
 {
     //除去待签名参数数组中的空值和签名参数
     $para_filter = paraFilter($para_temp);
     //对待签名参数数组排序
     $para_sort = argSort($para_filter);
     //把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
     $prestr = createLinkstring($para_sort);
     $isSgin = false;
     switch (strtoupper(trim($this->alipay_config['sign_type']))) {
         case "RSA":
             $isSgin = rsaSign($prestr, trim($this->alipay_config['private_key_path']));
             break;
         default:
             $isSgin = false;
     }
     return $isSgin;
 }
예제 #4
0
 function buildRequestMysign($para_sort)
 {
     $prestr = createLinkstring($para_sort);
     $mysign = "";
     switch (strtoupper(trim($this->alipay_config['sign_type']))) {
         case "MD5":
             $mysign = md5Sign($prestr, $this->alipay_config['key']);
             break;
         case "RSA":
             $mysign = rsaSign($prestr, $this->alipay_config['private_key_path']);
             break;
         case "0001":
             $mysign = rsaSign($prestr, $this->alipay_config['private_key_path']);
             break;
         default:
             $mysign = "";
     }
     return $mysign;
 }
예제 #5
0
 /**
  * 支付宝支付
  */
 public function alipayAction()
 {
     //支付宝提供的加密方式
     include_once __DIR__ . '/../../utils/alipay/lib/alipay_core.function.php';
     $babyId = $this->devices->getBabyIdByShoeId($this->userInfo['uid'], $this->_sanReq['shoe_id']);
     if (!$babyId) {
         $this->_showMsg(self::NON_SHOE, $this->di['flagmsg'][self::NON_SHOE]);
     }
     $rel = $this->_checkRelation($this->userInfo['uid'], $babyId['baby_id']);
     //角色名
     if (!empty($rel) && $rel['family_rolename'] != '') {
         $rolename = $rel['family_rolename'];
     } else {
         $rolename = '';
     }
     //获取套餐
     $renew = $this->renew->getRenew($serviceId, 1);
     if (!$renew) {
         $this->_showMsg(self::NON_PACKAGE, $this->di['flagmsg'][self::NON_PACKAGE]);
     }
     //配置
     $alipayConf = $this->di->get('sysconfig')['payment']['alipay'];
     //签名参数
     $params['partner'] = $alipayConf['partner'];
     $params['seller_id'] = $alipayConf['seller_id'];
     $params['out_trade_no'] = (string) Common::makeOrderSn();
     $params['subject'] = $renew['cr_name'];
     $params['body'] = $renew['cr_detail'];
     $params['total_fee'] = (string) number_format($renew['cr_real_price'], '2', '.', '');
     $params['notify_url'] = $this->di->get['sysconfig']['renewServer'] . $alipayConf['notify_url'];
     $params['service'] = 'mobile.securitypay.pay';
     $params['_input_charset'] = 'utf-8';
     $params['payment_type'] = '1';
     //生成续费订单,入库
     if (($res = $this->renew->renewUpdate($shoeId, $this->userInfo['uid'], $serviceId, $_SERVER['REQUEST_TIME'], 1, $params['out_trade_no'], 1, $params['total_fee'], $params['subject'], $renew['cr_period'], $renew['cr_coins'], $rolename, $babyId['baby_id'], $babyId['dev_imei'])) != self::SUCCESS) {
         $this->_showMsg($res, $this->di['flagmsg'][$res]);
     }
     $data = makeSignstring(argSort(paraFilter($params)));
     $params['sign'] = urlencode(rsaSign($data, $alipay_config['private_key_path']));
     $this->_returnResult(array('flag' => self::SUCCESS, 'data' => urlencode($data . '&sign="' . $params['sign'] . '"&sign_type="RSA"'), 'order_no' => $params['out_trade_no']));
 }
예제 #6
0
 public function actionChargeOrder()
 {
     // 检查参数
     if (!isset($_REQUEST['uid']) || !isset($_REQUEST['pay_type']) || !isset($_REQUEST['token']) || !isset($_REQUEST['goods_id']) || !isset($_REQUEST['pay_type']) || !isset($_REQUEST['payment_type'])) {
         $this->_return('MSG_ERR_LESS_PARAM');
     }
     $uid = Yii::app()->request->getParam('uid');
     $token = trim(Yii::app()->request->getParam('token'));
     $pay_type = trim(Yii::app()->request->getParam('pay_type'));
     $app_id = trim(Yii::app()->request->getParam('app_id'));
     $payment_type = trim(Yii::app()->request->getParam('payment_type', 1));
     $goods_id = Yii::app()->request->getParam('goods_id');
     if (!Token::model()->verifyToken($uid, $token, $GLOBALS['__APPID'])) {
         $this->_return('MSG_ERR_TOKEN');
     }
     if (!User::model()->isSetPassword($uid)) {
         $this->_return('MSG_ERR_UNSET_PASSWORD');
     }
     $goods_info = Common::model()->getGoodsInfo($goods_id);
     if (!is_array($goods_info)) {
         $this->_return('MSG_ERR_FAIL_PARAM');
     }
     // 支付订单创建
     $out_trade_no = Pay::model()->createOrder($uid, $goods_info, $GLOBALS['__APPID'], $pay_type, $GLOBALS['__CHANNEL'], $GLOBALS['__PLATFORM']);
     if ($out_trade_no < 0) {
         $this->_return('MSG_ERR_UNKOWN');
     }
     // 记录Log
     Log::model()->_pay_log($uid, 'CREATE_ORDER', date('Y-m-d H:i:s'), $out_trade_no);
     $data['out_trade_no'] = $out_trade_no;
     $config_arr = Yii::app()->params['alipay_config'];
     //支付宝充值返回支付宝前段签名
     Yii::import('application.extensions.alipay.*');
     require_once 'lib/alipay_notify.class.php';
     $alipayNotify = new AlipayNotify($config_arr);
     $price = $goods_info['price'] / 100;
     $subject = $goods_info['name'];
     $body = $goods_info['name'] . ", 你值得拥有";
     $price = '"' . $price . '"';
     $subject = '"' . $subject . '"';
     $body = '"' . $body . '"';
     if ($app_id) {
         $app_id = '"' . $app_id . '"';
     }
     /*
     if($extern_token){
         $extern_token = '"'.$extern_token.'"';
     }
     */
     /*
     if($appenv){
         $appenv = '"'.$appenv.'"';
     }
     */
     if ($payment_type) {
         $payment_type = '"' . $payment_type . '"';
     }
     /*
     if($it_b_pay){
         $it_b_pay = '"'.$it_b_pay.'"';
     }
     */
     /*
     if($show_url){
         $show_url = '"'.urlencode($show_url).'"';
     }
     */
     $service = '"mobile.securitypay.pay"';
     $partner = '"' . Yii::app()->params['partner'] . '"';
     $charset = '"utf-8"';
     $notify_url = '"' . urlencode(Yii::app()->params['notifyUrl']) . '"';
     $out_trade_no = '"' . $out_trade_no . '"';
     $seller_id = '"' . Yii::app()->params['partner'] . '"';
     $sign_date = array('seller_id' => $seller_id, 'total_fee' => $price, 'service' => $service, 'partner' => $partner, '_input_charset' => $charset, 'notify_url' => $notify_url, 'out_trade_no' => $out_trade_no, 'subject' => $subject, 'app_id' => $app_id, 'payment_type' => $payment_type, 'body' => $body);
     $sign_date = paraFilter($sign_date);
     $sign_date = createLinkstring($sign_date);
     $private_key_url = '../extensions/alipay/' . $alipayNotify->alipay_config['private_key_path'];
     $data['sign'] = rsaSign($sign_date, $private_key_url);
     $data['url'] = $sign_date;
     $data['notifyUrl'] = Yii::app()->params['notifyUrl'];
     // 发送返回值
     $this->_return('MSG_SUCCESS', $data);
 }
예제 #7
0
function creatersa($info)
{
    $rsa = rsaSign($info, dirname(__FILE__) . '/mobilepay/alipaysdk/key/rsa_private_key.pem');
    return $rsa;
}
예제 #8
0
function rsaSign($data)
{
    $priKey = "-----BEGIN RSA PRIVATE KEY-----\n生成密钥时获取的私钥字符串,直接使用pem文件的完整字符串\n-----END RSA PRIVATE KEY-----";
    $res = openssl_get_privatekey($priKey);
    openssl_sign($data, $sign, $res);
    openssl_free_key($res);
    $sign = base64_encode($sign);
    $sign = urlencode($sign);
    return $sign;
}
// 支付宝合作者身份ID,以2088开头的16位纯数字
$partner = "%支付宝PartnerID%";
// 支付宝账号
$seller_id = '%支付宝账号,通常为邮箱地址%';
// 商品网址
$base_path = urlencode('http://www.dcloud.io/helloh5/');
// 异步通知地址
$notify_url = urlencode('http://demo.dcloud.net.cn/payment/alipay/notify.php');
// 订单标题
$subject = 'DCloud项目捐赠';
// 订单详情
$body = 'DCloud致力于打造HTML5最好的移动开发工具,包括终端的Runtime、云端的服务和IDE,同时提供各项配套的开发者服务。';
// 订单号,示例代码使用时间值作为唯一的订单ID号
$out_trade_no = date('YmdHis', time());
$parameter = array('service' => 'mobile.securitypay.pay', 'partner' => $partner, '_input_charset' => 'UTF-8', 'out_trade_no' => $out_trade_no, 'subject' => $subject, 'payment_type' => '1', 'seller_id' => $seller_id, 'total_fee' => $total, 'body' => $body, 'it_b_pay' => '1d', 'notify_url' => $notify_url, 'show_url' => $base_path);
//生成需要签名的订单
$orderInfo = createLinkstring($parameter);
//签名
$sign = rsaSign($orderInfo);
//生成订单
echo $orderInfo . '&sign="' . $sign . '"&sign_type="RSA"';
예제 #9
0
 function getrsaSign($prestr)
 {
     $isSgin = rsaSign($prestr, trim($this->alipay_config['private_key_path']));
     return $isSgin;
 }