ecommerce是openedx的商品购买模块,在新的openedx版本中,ecommerce已经取代了原来的shoppingcart模块。由于ecommerce模块较为复杂,其与edx-platform通过API接口进行通信。由于这种原因其配置和调试较为困难。为了方便文档的表述,将ecommerce的域名为http://ecommerce.site,将edx-platform中lms模块的域名为http://lms.site,配置过程如下(本操作基于ginkgo.2版本):
一、初始化设置
1、登录http://lms.site/admin/oauth2/client/这个页面(使用超级用户),如果该页面无法访问,检查lms/envs/commony.py的设置是否为如下:
‘ENABLE_OAUTH2_PROVIDER’:true
在界面上添加一个客户端设置,内容如下(供参考),为了后续记录方便”Client id”和”Client secert”使用了预定义的字符
Name:Ecommerce
Redirect uri:http://ecommerce.site/complete/edx-oidc/
Client id:sample_id (该部分会自动生成,也可以手动修改,注意不要泄露)
Client secret:sample_secert (该部分会自动生成,也可以手动修改,注意不要泄露)
Client type:Confidential(Web application)
Logout uri:http://ecommerce.site/logout/
2、登录http://lms.site/admin/edx_oauth2_provider/trustedclient/,在该页面添加并选定一个刚设置的客户端,内容如下:
3、配置ecommerce的基本设置,加载基本环境,使用如下命令:
cd /edx/app/ecommerce/
sudo -H -u ecommerce bash
source ./venvs/ecommerce/bin/activate
加载基本环境后,创建初始的配置,这个配置会写在数据库中。
cd /edx/app/ecommerce/ecommerce/
manage.py create_or_update_site –site-id=1 –site-domain=ecommerce.site –partner-code=edX –partner-name=’Ginkgo’ –lms-url-root=http://lms.site –payment-processors=paypal –client-id=sample_id –client-secret=sample_secret –from-email=he_yuan_tao@163.com
上述配置模式只是用paypal支付功能
4、启用LMS的Commerce功能
此时LMS在支付时并不能转跳到Ecommerce界面,需要再LMS的admin的界面进行配置:
#增加一个选项并进行如下配置
Enabled:勾选
Checkout on ecommerce service:勾选
Single course checkout page: /basket/single-item/
Cache Time To Live:600 #这个数值暂不清楚功能
Recept page:/checkout/receipt/?order_number=
Enable automatic refund approval:勾选
二、配置文件修改
1、LMS和CMS部分的修改
在lms.env.json文件中修改如下内容:
“ECOMMERCE_API_URL”: “http://ecommerce.site/api/v2“,
“ECOMMERCE_PUBLIC_URL_ROOT”: “http://ecommerce.site/“,
“JWT_AUTH”: {
“JWT_AUDIENCE”: “SET-ME-PLEASE”,
“JWT_ISSUER”: “http://lms.site/oauth2“,
“JWT_SECRET_KEY”: “SET-ME-PLEASE”
},
“JWT_ISSUER”: “http://lms.site/oauth2“,
“LMS_ROOT_URL”: “http://lms.site“,
“OAUTH_ENFORCE_SECURE”: false,
“OAUTH_OIDC_ISSUER”: “http://lms.site/oauth2“,
“FEATURES”:{
“ENABLE_OAUTH2_PROVIDER”:true,
}
在lms.auth.json文件中进行如下字段的修改:
“EDX_API_KEY”: “” #填写1.1中key的内容
“ECOMMERCE_API_SIGNING_KEY”: “” #填写1.1中key的内容
建议对cms.env.json和cms.auth.json的内容进行类似的修改。
2、修改ecommerce的配置文件
在/edx/etc/ecommerce.yml文件中修改如下内容
COMMERCE_API_URL: http://lms.site/api/commerce/v1/
…
ECOMMERCE_URL_ROOT: http://ecommerce.site/
EDX_API_KEY: sample_id
…
ENROLLMENT_API_URL: http://lms.site/api/enrollment/v1/enrollment
JWT_AUTH:
JWT_ALGORITHM: HS256
JWT_DECODE_HANDLER: ecommerce.extensions.api.handlers.jwt_decode_handler
JWT_ISSUERS:
– ecommerce_worker
JWT_LEEWAY: 1
JWT_SECRET_KEY: SET-ME-PLEASE
JWT_SECRET_KEYS:
– SET-ME-PLEASE
JWT_VERIFY_EXPIRATION: true
…
LMS_DASHBOARD_URL: http://lms.site/dashboard
LMS_HEARTBEAT_URL: http://lms.site/heartbeat
LMS_URL_ROOT: http://lms.site
OAUTH2_PROVIDER_URL: http://lms.site/oauth2
PAYMENT_PROCESSOR_CONFIG:
alipay:
app_id: 2016081900287513
app_private_key_path: /edx/app/ecommerce/cert/app_private_key.pem #自己定义的密钥
alipay_public_key_path: /edx/app/ecommerce/cert/alipay_public_key.pem #从阿里云下载的公钥
mode: sandbox
app_notify_url: http://ecommerce.site/checkout/alipay/
cancel_url: http://127.0.0.1:8000/commerce/checkout/cancel/
receipt_url: http://127.0.0.1:8000/commerce/checkout/receipt/
SECRET_KEY: sample_secert
SESSION_EXPIRE_AT_BROWSER_CLOSE: false
SOCIAL_AUTH_EDX_OIDC_ID_TOKEN_DECRYPTION_KEY: sample_id
#上面的这个可能用不上
SOCIAL_AUTH_EDX_OIDC_ISSUER: http://lms.site/oauth2
SOCIAL_AUTH_EDX_OIDC_KEY: sample_id
SOCIAL_AUTH_EDX_OIDC_LOGOUT_URL: http://lms.site/logout
SOCIAL_AUTH_EDX_OIDC_SECRET: sample_secert
SOCIAL_AUTH_EDX_OIDC_URL_ROOT: http://lms.site/oauth2
SOCIAL_AUTH_REDIRECT_IS_HTTPS: false
三、细节修改
配置完成后,支付的流程已经能进行,但由于openedx在支付阶段使用了https来增强支付的安全性。课程购买过程中会发生转跳到https协议网址的情况,但如果网址没有启用https则会发生异常。需要对配置进行修改:
#ecommerce/core/models.py
class SiteConfiguration(models.Model):
…
def build_ecommerce_url(self, path=”):
…
scheme = ‘http’ if settings.DEBUG else ‘https’ #将此处修改为只支持http协议
ecommerce_url_root = “{scheme}://{domain}”.format(scheme=scheme, domain=self.site.domain)
return urljoin(ecommerce_url_root, path)