lokielse / omnipay-wechatpay

(微信支付)WeChatPay driver for the Omnipay PHP payment processing library
MIT License
315 stars 103 forks source link

有获取openid的方法吗? #31

Closed esolo0121 closed 7 years ago

esolo0121 commented 7 years ago

用的WechatPay_Js 公众号支付,而公众号支付,需要用户OPENID,找许久,源码里没有关于获取OPENID的代码,不知楼主是否有做相关功能?或者说是否有公众号支付的相关案例。以下是提示错误: The open_id parameter is required

我的代码是: ` $gateway = Omnipay::create('WechatPay_Js'); $gateway->setAppId(config('pay.wechatpay.appid')); $gateway->setMchId(config('pay.wechatpay.mchid')); $gateway->setApiKey(config('pay.wechatpay.key')); $gateway->setNotifyUrl('http://example.com/notify'); $gateway->setTradeType('JSAPI');

    $order = [
        'body'              => 'The test order',
        'out_trade_no'      => date('YmdHis').mt_rand(1000, 9999),
        'total_fee'         => 1, //=0.01
        'spbill_create_ip'  => 'ip_address',
        'fee_type'          => 'CNY'
    ];

`

esolo0121 commented 7 years ago

期待你的回复

lokielse commented 7 years ago

@esolo0121 https://easywechat.org/zh-cn/docs/oauth.html

phpstudyer commented 7 years ago

@lokielse 额,貌似问题不在于怎么获取Open_id 而在于如何设置open_id . setOpenId()并不存在

lokielse commented 7 years ago

@phpstudyer @esolo0121

$order = [
        'body'              => 'The test order',
        'out_trade_no'      => date('YmdHis').mt_rand(1000, 9999),
        'total_fee'         => 1, //=0.01
        'spbill_create_ip'  => 'ip_address',
        'fee_type'          => 'CNY',
        'open_id'           =>'xxxxxxx'
];
lokielse commented 7 years ago

@phpstudyer https://github.com/lokielse/omnipay-wechatpay/blob/90f7c72740597818d8a104cac1a6a75cfdb4f121/src/Message/CreateOrderRequest.php#L335

有这个方法的...

phpstudyer commented 7 years ago

@lokielse 哈哈,我改了你的源码.你的这个方式也行.谢谢了

esolo0121 commented 7 years ago

@lokielse 楼主给的链接 这个方法,只是设置openid,并不是获取。 @phpstudyer 能否上一份获取openid的方法?

`

public function setOpenId($openId)

  | {   | $this->setParameter('open_id', $openId);   | }

`

phpstudyer commented 7 years ago

@esolo0121 这个是微信这块的了.

public function getOpenId($appid, $secret, $jsCode, $grantType) { $url = "https://api.weixin.qq.com/sns/jscode2session?appid=$appid&secret=$secret&js_code=$jsCode&grant_type=$grantType"; $res = json_decode(file_get_contents($url), true); if (isset($res['errcode'])) { throw new \Exception($res['errmsg']); } return $res['openid']; }

这个是官方给的demo 可以直接用的

esolo0121 commented 7 years ago

@phpstudyer 谢谢,我先试着用下

esolo0121 commented 7 years ago

@phpstudyer @lokielse 我用我的方法也实现了,就是看着代码太乱,楼主是否能整合下获取openid的功能,这样用插件的意义就更大了

lokielse commented 7 years ago

不整合,见我第一个回复。